diff --git a/.github/hooks/pre-commit b/.github/hooks/pre-commit deleted file mode 100644 index 9af2a430..00000000 --- a/.github/hooks/pre-commit +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -VERSION_FILE="app/version" - -CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S") - -if jq --arg date "$CURRENT_DATE" '.last_update = $date' "$VERSION_FILE" > temp.json; then - mv temp.json "$VERSION_FILE" - git add "$VERSION_FILE" -else - echo "Error: Failed to update version file" - exit 1 -fi diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml deleted file mode 100644 index aaaeed00..00000000 --- a/.github/workflows/run_tests.yaml +++ /dev/null @@ -1,40 +0,0 @@ -name: Run Tests -on: - pull_request: - branches: - - main # Run on PRs targeting main - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Python 3.13 - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - name: Run tests - id: run_tests - run: | - set -e # Exit immediately if a command exits with a non-zero status - ./ace --test - continue-on-error: false - - - name: Upload test results - if: always() # Run even if tests fail - uses: actions/upload-artifact@v4 - with: - name: pytest-results - path: | - .pytest_cache/ - tests/**/test-*.xml - tests/**/test-*.html - - # Force the workflow to fail if tests failed - - name: Fail workflow if tests failed - if: failure() - run: | - echo "Tests failed - failing workflow" - exit 1 diff --git a/README.md b/README.md index d467078f..25a8ce73 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,9 @@ -![Version](https://img.shields.io/badge/version-0.0.0-blue) +# ACE Framework Documentation -

🧠 ACE Prototype 🧠

+## Overview +The ACE Framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro et al. at Clemson University and presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). -# Dependencies +The framework is inspired by the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures, ranging from moral reasoning to task execution. -- Before running install - - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - - [JQ](https://jqlang.org/download/) - - [Podman](https://podman.io/docs/installation) - - [Ollama](https://ollama.com/download) - -# Usage - -```shell -./ace -``` - -## Arguments - -- `-s` Stop the ACE -- `-r` Restart the ACE -- `--dev` Run the ACE in development mode -- `--test` Run the ACE tests +[Source](design/source.md) diff --git a/ace b/ace deleted file mode 100755 index d7896cfb..00000000 --- a/ace +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -# VARIABLES -ACE_LOGGER_VERBOSE_ENV="." - - -# SETUP -setup() { - echo "Setting up environment..." - git_hooks_folder=".github/hooks" - mv -r "$git_hooks_folder" ".git/hooks" -} - - -# STARTUP -run_tests() { - echo "Installing/Updating test dependencies..." - pip install --upgrade -r app/requirements - pip install --upgrade -r tests/requirements - - python -m pytest tests/unit/ -v - pytest_exit_code=$? - exit $pytest_exit_code -} - -run_ace() { - cd app || exit - - echo "Installing/Updating requirements..." - pip install --upgrade -r requirements - - ACE_LOGGER_FILE_NAME="startup" ACE_LOGGER_VERBOSE="$ACE_LOGGER_VERBOSE_ENV" ./startup.py "${@}" - deactivate - exit $? -} - -# MAIN -main() { - # Store original arguments - original_args=("$@") - - setup - - # Initialize variables - run_tests=false - - # Process arguments for environment variables - while [[ $# -gt 0 ]]; do - case "$1" in - --dev) - ACE_LOGGER_VERBOSE_ENV="" - ;; - --test) - run_tests=true - ;; - esac - shift - done - - if [ ! -d ".venv" ]; then - echo "Python virtual environment doesn't exist, creating one..." - python3.13 -m venv .venv - fi - source .venv/bin/activate - - if [ "$run_tests" = true ]; then - run_tests - fi - - # Use original arguments when running ace - run_ace "${original_args[@]}" -} - -trap 'exit $?' ERR - -main "$@" \ No newline at end of file diff --git a/app/component.py b/app/component.py deleted file mode 100755 index 56503dbc..00000000 --- a/app/component.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3.13 - -# DEPENDENCIES -## Built-in -import argparse -from typing import Callable -## Local -from constants import Components, DictKeys -from logger import logger -from components import start_actions, start_controller, start_layer, start_memory, start_model_provider, start_queue, start_telemetry, start_ui - - -# CONSTANTS -_COMPONENT_MAP: dict[str, Callable[[str], None]] = { - Components.CONTROLLER: start_controller, - Components.UI: start_ui, - Components.QUEUE: start_queue, - Components.TELEMETRY: start_telemetry, - Components.ACTIONS: start_actions, - Components.MEMORY: start_memory, - Components.MODEL_PROVIDER: start_model_provider, - Components.ASPIRATIONAL: start_layer, - Components.GLOBAL_STRATEGY: start_layer, - Components.AGENT_MODEL: start_layer, - Components.EXECUTIVE_FUNCTION: start_layer, - Components.COGNITIVE_CONTROL: start_layer, - Components.TASK_PROSECUTION: start_layer -} - -# ARGUMENTS -def _get_arguments() -> dict[str, bool]: - parser = argparse.ArgumentParser() - parser.add_argument("--dev", action="store_true", help="Enable dev mode") - parser.add_argument("--prod", action="store_true") - parser.add_argument(f"--{Components.CONTROLLER}", action="store_true") - parser.add_argument(f"--{Components.UI}", action="store_true") - parser.add_argument(f"--{Components.QUEUE}", action="store_true") - parser.add_argument(f"--{Components.TELEMETRY}", action="store_true") - parser.add_argument(f"--{Components.ACTIONS}", action="store_true") - parser.add_argument(f"--{Components.MEMORY}", action="store_true") - parser.add_argument(f"--{Components.MODEL_PROVIDER}", action="store_true") - parser.add_argument(f"--{Components.ASPIRATIONAL}", action="store_true") - parser.add_argument(f"--{Components.GLOBAL_STRATEGY}", action="store_true") - parser.add_argument(f"--{Components.AGENT_MODEL}", action="store_true") - parser.add_argument(f"--{Components.EXECUTIVE_FUNCTION}", action="store_true") - parser.add_argument(f"--{Components.COGNITIVE_CONTROL}", action="store_true") - parser.add_argument(f"--{Components.TASK_PROSECUTION}", action="store_true") - return vars(parser.parse_args()) - - -# STARTUP -def run_component() -> None: - """Startup the selected component""" - arguments: dict[str, bool] = _get_arguments() - - dev: bool = arguments.get(DictKeys.DEV, False) - prod: bool = arguments.get(DictKeys.PROD, False) - if not (dev or prod): - logger.critical("You must select a environment, either --dev or --prod!") - raise SystemExit - - if dev and prod: - dev = False - - selected_compenent: str | None = None - for argument, is_flagged in arguments.items(): - if argument == DictKeys.DEV or argument == DictKeys.PROD: - continue - if not is_flagged: - continue - if selected_compenent: - logger.critical("You can only start one component at a time!") - raise SystemExit - selected_compenent = argument - - if not selected_compenent: - logger.critical("You must select a component to start!") - raise SystemExit - - if selected_compenent not in _COMPONENT_MAP: - logger.critical(f"{selected_compenent} is not a valid component!") - raise SystemExit - - component_title: str = selected_compenent.replace("_", " ").title() - _COMPONENT_MAP[selected_compenent](component_type=component_title, dev=dev) - from time import sleep - while True: - logger.info(f"{component_title} is running...") - sleep(60) - - -if __name__ == "__main__": - run_component() diff --git a/app/components/__init__.py b/app/components/__init__.py deleted file mode 100644 index 645abace..00000000 --- a/app/components/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from .actions.start import start_actions -from .controller.start import start_controller -from .layer.start import start_layer -from .memory.start import start_memory -from .model_provider.start import start_model_provider -from .queue.start import start_queue -from .telemetry.start import start_telemetry -from .ui.start import start_ui \ No newline at end of file diff --git a/app/components/actions/__init__.py b/app/components/actions/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/actions/start.py b/app/components/actions/start.py deleted file mode 100644 index baf37ab4..00000000 --- a/app/components/actions/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_actions(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/controller/__init__.py b/app/components/controller/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/controller/api/__init__.py b/app/components/controller/api/__init__.py deleted file mode 100644 index 0a4c11ab..00000000 --- a/app/components/controller/api/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# DEPENDENCIES -## Third-Party -from fastapi import FastAPI -from fastapi.middleware.cors import CORSMiddleware -## Local -from .routes import root, model_provider - - -controller_api = FastAPI() - -controller_api.include_router(root) -controller_api.include_router(model_provider) - -controller_api.add_middleware( - CORSMiddleware, - allow_origins=["http://localhost:4200", "http://127.0.0.1:4200"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], - expose_headers=["*"] -) diff --git a/app/components/controller/api/routes/__init__.py b/app/components/controller/api/routes/__init__.py deleted file mode 100644 index 930bd094..00000000 --- a/app/components/controller/api/routes/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .model_provider import model_provider -from .root import root diff --git a/app/components/controller/api/routes/model_provider.py b/app/components/controller/api/routes/model_provider.py deleted file mode 100644 index 9d89b08b..00000000 --- a/app/components/controller/api/routes/model_provider.py +++ /dev/null @@ -1,43 +0,0 @@ -# DEPENDENCIES -## Third-Party -from fastapi import APIRouter, HTTPException -from http import HTTPStatus -from pydantic import ValidationError -## Local -from constants import APIRoutes, Defaults, Names -from logger import logger -from models.api_schemas.controller import GetLLMModelsResponse -from ..services import model_provider_service - - -model_provider = APIRouter() - -@model_provider.get( - f"{APIRoutes.MODEL_PROVIDER}llm/model-types", - response_model=tuple[str, ...], - description=f"Get the {Names.ACE} available LLM model types" -) -async def get_llm_model_types_route() -> tuple[str, ...]: - try: - return model_provider_service.get_llm_model_types() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="LLM model types data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@model_provider.get( - f"{APIRoutes.MODEL_PROVIDER}llm/models", - response_model=list[GetLLMModelsResponse], - description=f"Get the {Names.ACE} available LLM models" -) -async def get_llm_models_route() -> list[GetLLMModelsResponse]: - try: - return model_provider_service.get_llm_models() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="LLM model types data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) diff --git a/app/components/controller/api/routes/root.py b/app/components/controller/api/routes/root.py deleted file mode 100644 index c1e3e330..00000000 --- a/app/components/controller/api/routes/root.py +++ /dev/null @@ -1,79 +0,0 @@ -# DEPENDENCIES -## Third-Party -from fastapi import APIRouter, HTTPException -from http import HTTPStatus -from pydantic import ValidationError -## Local -from constants import APIRoutes, Defaults, Names -from logger import logger -from models.api_schemas.controller import ( - GetVersionDetailsResponse, - GetSettingsResponse, EditSettingsRequest -) -from models.api_schemas.defaults import DefaultAPIResponse -from ..services import root_service - - -root = APIRouter() - -@root.get( - f"{APIRoutes.ROOT}version", - response_model=GetVersionDetailsResponse, - description=f"Get the {Names.ACE}'s version data" -) -async def get_version_route() -> dict: - try: - return root_service.get_version() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Version data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@root.get( - f"{APIRoutes.ROOT}settings", - response_model=GetSettingsResponse, - description=f"Get the {Names.ACE} controller settings data" -) -async def get_settings_route() -> dict: - try: - return root_service.get_settings_data() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@root.post( - f"{APIRoutes.ROOT}settings", - response_model=DefaultAPIResponse, - description=f"Edit the {Names.ACE} controller settings data" -) -async def set_settings_route(updated_settings: EditSettingsRequest) -> dict: - try: - root_service.edit_settings_data(updated_settings=updated_settings.model_dump()) - return DefaultAPIResponse(message="Settings data updated successfully!") - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@root.delete( - f"{APIRoutes.ROOT}settings", - response_model=DefaultAPIResponse, - description=f"Delete the {Names.ACE} controller settings data" -) -async def delete_settings_route() -> dict: - try: - root_service.delete_settings_data() - return DefaultAPIResponse(message="Settings data deleted successfully!") - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) \ No newline at end of file diff --git a/app/components/controller/api/services/__init__.py b/app/components/controller/api/services/__init__.py deleted file mode 100644 index 5f4be591..00000000 --- a/app/components/controller/api/services/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import ( - model_provider as model_provider_service, - root as root_service -) \ No newline at end of file diff --git a/app/components/controller/api/services/model_provider.py b/app/components/controller/api/services/model_provider.py deleted file mode 100644 index 124a0395..00000000 --- a/app/components/controller/api/services/model_provider.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Built-In -import json -## Local -from constants import ( - Files, - ModelTypes, ThreeDModelTypes, AudioModelTypes, ImageModelTypes, LLMModelTypes, MultiModalModelTypes, RAGModelTypes, RoboticsModelTypes, VideoModelTypes -) -from models.data.initial import INTITAL_LLM_MODEL_PROVIDERS - - -def get_llm_model_types() -> tuple[str, ...]: - return LLMModelTypes.get_tuple() - -def get_llm_models() -> list[dict]: - llm_model_providers: list[dict] = [initial_llm_model_provider.model_dump() for initial_llm_model_provider in INTITAL_LLM_MODEL_PROVIDERS] - with open(Files.CONTROLLER_LLM_MODELS, "r", encoding="utf-8") as llm_models_file: - llm_models: dict = json.loads(llm_models_file.read()) - llm_model_providers.extend(llm_models) - return llm_model_providers diff --git a/app/components/controller/api/services/root.py b/app/components/controller/api/services/root.py deleted file mode 100644 index 079be34f..00000000 --- a/app/components/controller/api/services/root.py +++ /dev/null @@ -1,36 +0,0 @@ -# DEPENDENCIES -## Built-In -import json -## Local -from constants import Files -from models.config.controller import ControllerSettingsSchema - - -# HELPERS -def _get_settings() -> dict: - settings: dict = {} - with open(Files.CONTROLLER_SETTINGS, "r", encoding="utf-8") as settings_file: - settings = json.loads(settings_file.read()) - settings = ControllerSettingsSchema(**settings).model_dump() - with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file: - settings_file.write(json.dumps(settings)) - return settings - - -# ROOT -def get_version() -> dict: - with open(Files.VERSION, "r", encoding="utf-8") as settings_file: - return json.loads(settings_file.read()) - -def get_settings_data() -> dict: - return _get_settings() - -def edit_settings_data(updated_settings: dict): - settings: dict = _get_settings() - settings.update(updated_settings) - with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file: - settings_file.write(json.dumps(settings)) - -def delete_settings_data(): - with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file: - settings_file.write(json.dumps({})) diff --git a/app/components/controller/start.py b/app/components/controller/start.py deleted file mode 100644 index 55b36c1b..00000000 --- a/app/components/controller/start.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Third-Party -import uvicorn -## Local -from constants import NetworkPorts -from logger import logger -from .api import controller_api - -def start_controller(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") - uvicorn.run(controller_api, host="0.0.0.0", port=int(NetworkPorts.CONTROLLER)) diff --git a/app/components/layer/__init__.py b/app/components/layer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/layer/start.py b/app/components/layer/start.py deleted file mode 100644 index 031bd90d..00000000 --- a/app/components/layer/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_layer(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/memory/__init__.py b/app/components/memory/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/memory/start.py b/app/components/memory/start.py deleted file mode 100644 index 0c553c91..00000000 --- a/app/components/memory/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_memory(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/model_provider/__init__.py b/app/components/model_provider/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/model_provider/start.py b/app/components/model_provider/start.py deleted file mode 100644 index 5fb03644..00000000 --- a/app/components/model_provider/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_model_provider(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/queue/__init__.py b/app/components/queue/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/queue/start.py b/app/components/queue/start.py deleted file mode 100644 index 4d32faab..00000000 --- a/app/components/queue/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_queue(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/telemetry/__init__.py b/app/components/telemetry/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/telemetry/start.py b/app/components/telemetry/start.py deleted file mode 100644 index e25521d4..00000000 --- a/app/components/telemetry/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_telemetry(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/ui/.editorconfig b/app/components/ui/.editorconfig deleted file mode 100644 index f166060d..00000000 --- a/app/components/ui/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single -ij_typescript_use_double_quotes = false - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/app/components/ui/.gitignore b/app/components/ui/.gitignore deleted file mode 100644 index cc7b1413..00000000 --- a/app/components/ui/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db diff --git a/app/components/ui/__init__.py b/app/components/ui/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/angular.json b/app/components/ui/angular.json deleted file mode 100644 index 3a6fb06a..00000000 --- a/app/components/ui/angular.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "ui": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:application", - "options": { - "outputPath": "dist/ui", - "index": "src/index.html", - "browser": "src/main.ts", - "polyfills": [ - "zone.js" - ], - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "public" - } - ], - "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", - "src/theme.scss", - "src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kB", - "maximumError": "1MB" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kB", - "maximumError": "8kB" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "ui:build:production" - }, - "development": { - "buildTarget": "ui:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n" - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "polyfills": [ - "zone.js", - "zone.js/testing" - ], - "tsConfig": "tsconfig.spec.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "public" - } - ], - "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", - "src/styles.scss" - ], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/app/components/ui/package-lock.json b/app/components/ui/package-lock.json deleted file mode 100644 index 54fac815..00000000 --- a/app/components/ui/package-lock.json +++ /dev/null @@ -1,12561 +0,0 @@ -{ - "name": "ACE", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ACE", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^19.1.0", - "@angular/cdk": "^19.1.2", - "@angular/common": "^19.1.0", - "@angular/compiler": "^19.1.0", - "@angular/core": "^19.1.0", - "@angular/forms": "^19.1.0", - "@angular/material": "^19.1.2", - "@angular/platform-browser": "^19.1.0", - "@angular/platform-browser-dynamic": "^19.1.0", - "@angular/router": "^19.1.0", - "@ngrx/component": "^19.0.1", - "@ngrx/data": "^19.0.1", - "@ngrx/effects": "^19.0.1", - "@ngrx/entity": "^19.0.1", - "@ngrx/store": "^19.0.1", - "@ngrx/store-devtools": "^19.0.1", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.15.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^19.1.5", - "@angular/cli": "^19.1.5", - "@angular/compiler-cli": "^19.1.0", - "@types/jasmine": "~5.1.0", - "jasmine-core": "~5.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.7.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1901.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.1.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1901.5", - "@angular-devkit/build-webpack": "0.1901.5", - "@angular-devkit/core": "19.1.5", - "@angular/build": "19.1.5", - "@babel/core": "7.26.0", - "@babel/generator": "7.26.3", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.25.9", - "@babel/plugin-transform-async-to-generator": "7.25.9", - "@babel/plugin-transform-runtime": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/runtime": "7.26.0", - "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "19.1.5", - "@vitejs/plugin-basic-ssl": "1.2.0", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.20", - "babel-loader": "9.2.1", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "12.0.2", - "css-loader": "7.1.2", - "esbuild-wasm": "0.24.2", - "fast-glob": "3.3.3", - "http-proxy-middleware": "3.0.3", - "istanbul-lib-instrument": "6.0.3", - "jsonc-parser": "3.3.1", - "karma-source-map-support": "1.4.0", - "less": "4.2.1", - "less-loader": "12.2.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.3.1", - "mini-css-extract-plugin": "2.9.2", - "open": "10.1.0", - "ora": "5.4.1", - "picomatch": "4.0.2", - "piscina": "4.8.0", - "postcss": "8.4.49", - "postcss-loader": "8.1.1", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.83.1", - "sass-loader": "16.0.4", - "semver": "7.6.3", - "source-map-loader": "5.0.0", - "source-map-support": "0.5.21", - "terser": "5.37.0", - "tree-kill": "1.2.2", - "tslib": "2.8.1", - "webpack": "5.97.1", - "webpack-dev-middleware": "7.4.2", - "webpack-dev-server": "5.2.0", - "webpack-merge": "6.0.1", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.24.2" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0", - "@angular/localize": "^19.0.0", - "@angular/platform-server": "^19.0.0", - "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.1.5", - "@web/test-runner": "^0.19.0", - "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^19.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.5 <5.8" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "@web/test-runner": { - "optional": true - }, - "browser-sync": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1901.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1901.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^5.0.2" - } - }, - "node_modules/@angular-devkit/core": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.1.5", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.17", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.1.4" - } - }, - "node_modules/@angular/build": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1901.5", - "@angular-devkit/core": "19.1.5", - "@babel/core": "7.26.0", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.26.0", - "@inquirer/confirm": "5.1.1", - "@vitejs/plugin-basic-ssl": "1.2.0", - "beasties": "0.2.0", - "browserslist": "^4.23.0", - "esbuild": "0.24.2", - "fast-glob": "3.3.3", - "https-proxy-agent": "7.0.6", - "istanbul-lib-instrument": "6.0.3", - "listr2": "8.2.5", - "magic-string": "0.30.17", - "mrmime": "2.0.0", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.8.0", - "rollup": "4.30.1", - "sass": "1.83.1", - "semver": "7.6.3", - "vite": "6.0.11", - "watchpack": "2.4.2" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "lmdb": "3.2.2" - }, - "peerDependencies": { - "@angular/compiler": "^19.0.0", - "@angular/compiler-cli": "^19.0.0", - "@angular/localize": "^19.0.0", - "@angular/platform-server": "^19.0.0", - "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.1.5", - "less": "^4.2.0", - "ng-packagr": "^19.0.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.5 <5.8" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "less": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular/cdk": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.1.2.tgz", - "integrity": "sha512-rzrZ4BkGNIZWSdw0OsuSB/H9UB5ppPvmBq+uRHdYmZoYjo5wu1pmePxAIZDIBR8xdaNy9rZ4ecS6IebDkgYPrg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, - "peerDependencies": { - "@angular/common": "^19.0.0 || ^20.0.0", - "@angular/core": "^19.0.0 || ^20.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1901.5", - "@angular-devkit/core": "19.1.5", - "@angular-devkit/schematics": "19.1.5", - "@inquirer/prompts": "7.2.1", - "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "19.1.5", - "@yarnpkg/lockfile": "1.1.0", - "ini": "5.0.0", - "jsonc-parser": "3.3.1", - "listr2": "8.2.5", - "npm-package-arg": "12.0.1", - "npm-pick-manifest": "10.0.0", - "pacote": "20.0.0", - "resolve": "1.22.10", - "semver": "7.6.3", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@schematics/angular": { - "version": "19.1.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.1.5.tgz", - "integrity": "sha512-Yks2QD87z2qJhVLi6O0tQDBG4pyX5n5c8BYEyZ+yiThjzIXBRkHjWS1jIFvd/y1+yU/NQFHYG/sy8sVOxfQ9IA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "19.1.5", - "@angular-devkit/schematics": "19.1.5", - "jsonc-parser": "3.3.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/common": { - "version": "19.1.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.1.4.tgz", - "integrity": "sha512-E4MCl13VIotOxmzKQ/UGciPeaRXQgH7ymesEjYVGcT8jmC+qz5dEcoN7L5Jvq9aUsmLBt9MFp/B5QqKCIXMqYA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.1.4", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.1.4" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "19.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.26.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^4.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/compiler": "19.1.4", - "typescript": ">=5.5 <5.8" - } - }, - "node_modules/@angular/core": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.15.0" - } - }, - "node_modules/@angular/forms": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.1.4", - "@angular/core": "19.1.4", - "@angular/platform-browser": "19.1.4", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-19.1.2.tgz", - "integrity": "sha512-MdczdTmvsXLtEFV9nTgFs9mPM1FSAz4L1kByJCdIgHtOu62e9t2XcSUqOPJTlDrA5wWafZvPWh2woJfJr4iwjw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^19.0.0 || ^20.0.0", - "@angular/cdk": "19.1.2", - "@angular/common": "^19.0.0 || ^20.0.0", - "@angular/core": "^19.0.0 || ^20.0.0", - "@angular/forms": "^19.0.0 || ^20.0.0", - "@angular/platform-browser": "^19.0.0 || ^20.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/animations": "19.1.4", - "@angular/common": "19.1.4", - "@angular/core": "19.1.4" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.1.4", - "@angular/compiler": "19.1.4", - "@angular/core": "19.1.4", - "@angular/platform-browser": "19.1.4" - } - }, - "node_modules/@angular/router": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.1.4", - "@angular/core": "19.1.4", - "@angular/platform-browser": "19.1.4", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "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", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "10.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "external-editor": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.0.4", - "@inquirer/confirm": "^5.1.1", - "@inquirer/editor": "^4.2.1", - "@inquirer/expand": "^4.0.4", - "@inquirer/input": "^4.1.1", - "@inquirer/number": "^3.0.4", - "@inquirer/password": "^4.0.4", - "@inquirer/rawlist": "^4.0.4", - "@inquirer/search": "^3.0.4", - "@inquirer/select": "^4.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/search": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/select": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "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": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "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/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "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/@isaacs/fs-minipass": { - "version": "4.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "dev": true, - "license": "MIT", - "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.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@listr2/prompt-adapter-inquirer": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/type": "^1.5.5" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@inquirer/prompts": ">= 3 < 8" - } - }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { - "version": "1.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.2.2", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@napi-rs/nice": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.1", - "@napi-rs/nice-android-arm64": "1.0.1", - "@napi-rs/nice-darwin-arm64": "1.0.1", - "@napi-rs/nice-darwin-x64": "1.0.1", - "@napi-rs/nice-freebsd-x64": "1.0.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/nice-linux-arm64-gnu": "1.0.1", - "@napi-rs/nice-linux-arm64-musl": "1.0.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", - "@napi-rs/nice-linux-s390x-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-musl": "1.0.1", - "@napi-rs/nice-win32-arm64-msvc": "1.0.1", - "@napi-rs/nice-win32-ia32-msvc": "1.0.1", - "@napi-rs/nice-win32-x64-msvc": "1.0.1" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", - "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", - "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", - "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", - "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", - "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", - "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", - "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", - "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", - "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", - "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", - "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", - "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", - "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@ngrx/component": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/component/-/component-19.0.1.tgz", - "integrity": "sha512-uuGgjB8eAcIj9IiaMUxbIqCHo++jcPPsV2zEiF0q6v8CY07wrCQnn02jxwY09eNCUnvXQiGfYosV2wIWF1gu5A==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^19.0.0", - "@angular/core": "^19.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/data": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/data/-/data-19.0.1.tgz", - "integrity": "sha512-B8HVkBauCycRB9VlvpGovIbldnXrMz9tga0SUQa0tSTQ3IBYY3IEtHO7Q4X1LnCxxuIw8sR6guT+erBaURHDfg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^19.0.0", - "@angular/core": "^19.0.0", - "@ngrx/effects": "19.0.1", - "@ngrx/entity": "19.0.1", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/effects": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-19.0.1.tgz", - "integrity": "sha512-q+eztS1zN1247BtUZ41gxhumj4wMmvtfdSMfkFEuu6zuA57Vbx8zitEsw9boqPGtP5E4Cj5HKJLSJrl2kgwgcQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/entity": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/entity/-/entity-19.0.1.tgz", - "integrity": "sha512-Dw6UhLi7tGVWb/pLgYI81k1fPxCIbCWMztGKj08e8fLWoMvTWYTbG5tFbOJNSa9D3gPmxsBbbS8VMNqcUgl7wQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/store": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-19.0.1.tgz", - "integrity": "sha512-+6eBLb+0rdJ856JRuKnvSzFxv1ISbYuX/OM12dMPf4wm+ddxjhyvi6tF8lPiNnaYb717PGNxXQzBFIGfIs4zGQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/store-devtools": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-19.0.1.tgz", - "integrity": "sha512-afvr6NHh12LpYrOH9JKKEEi/z2DHq/wJ45hRn3mrcRDArQTKpTl7V2eu0dYgjGItSRSeJ2drzzKGjccL61PPSg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0", - "typescript": ">=5.5 <5.8", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git": { - "version": "6.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "6.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "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" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "9.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.30.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.30.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@sigstore/bundle": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/core": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^14.0.1", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "5.1.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@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.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@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.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "dev": true, - "license": "MIT", - "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/ajv-formats": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "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/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/autoprefixer/node_modules/caniuse-lite": { - "version": "1.0.30001696", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", - "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", - "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" - } - ] - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "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" - } - ], - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/beasties": { - "version": "0.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "htmlparser2": "^9.1.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.49", - "postcss-media-query-parser": "^0.2.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "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": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/browserslist/node_modules/caniuse-lite": { - "version": "1.0.30001696", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", - "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", - "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" - } - ] - }, - "node_modules/buffer": { - "version": "5.7.1", - "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" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "19.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "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" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "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/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "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" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "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/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.1", - "globby": "^14.0.0", - "normalize-path": "^3.0.0", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.40.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.90", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "punycode": "^1.4.1", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.24.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.24.2", - "dev": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.21.2", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "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.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "14.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "9.1.0", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.9", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.15", - "debug": "^4.3.6", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.3", - "is-plain-object": "^5.0.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.18" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "7.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "5.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-network-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "5.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/karma": { - "version": "6.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.7.2", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "4.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/chokidar": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/karma/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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/karma/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/karma/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/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/karma/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/karma/node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/string-width": { - "version": "4.2.3", - "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" - } - }, - "node_modules/karma/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/karma/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "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/karma/node_modules/yargs": { - "version": "16.2.0", - "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" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/launch-editor": { - "version": "2.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/less": { - "version": "4.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "12.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2": { - "version": "8.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lmdb": { - "version": "3.2.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "msgpackr": "^1.11.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.5.3", - "weak-lru-cache": "^1.2.2" - }, - "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.2.2", - "@lmdb/lmdb-darwin-x64": "3.2.2", - "@lmdb/lmdb-linux-arm": "3.2.2", - "@lmdb/lmdb-linux-arm64": "3.2.2", - "@lmdb/lmdb-linux-x64": "3.2.2", - "@lmdb/lmdb-win32-x64": "3.2.2" - } - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.2.tgz", - "integrity": "sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.2.tgz", - "integrity": "sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.2.tgz", - "integrity": "sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.2.tgz", - "integrity": "sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz", - "integrity": "sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "4.17.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/minizlib/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/minizlib/node_modules/glob": { - "version": "10.4.5", - "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" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/rimraf": { - "version": "5.0.10", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.2", - "dev": true, - "license": "MIT", - "optional": true, - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" - } - }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" - } - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "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" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-install-checks": { - "version": "7.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-package-arg": { - "version": "12.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-packlist": { - "version": "9.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-binary": { - "version": "1.5.3", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "20.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.2.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "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-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "4.8.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "@napi-rs/nice": "^1.0.1" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/proc-log": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "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" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "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" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.30.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.30.1", - "@rollup/rollup-android-arm64": "4.30.1", - "@rollup/rollup-darwin-arm64": "4.30.1", - "@rollup/rollup-darwin-x64": "4.30.1", - "@rollup/rollup-freebsd-arm64": "4.30.1", - "@rollup/rollup-freebsd-x64": "4.30.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", - "@rollup/rollup-linux-arm-musleabihf": "4.30.1", - "@rollup/rollup-linux-arm64-gnu": "4.30.1", - "@rollup/rollup-linux-arm64-musl": "4.30.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", - "@rollup/rollup-linux-riscv64-gnu": "4.30.1", - "@rollup/rollup-linux-s390x-gnu": "4.30.1", - "@rollup/rollup-linux-x64-gnu": "4.30.1", - "@rollup/rollup-linux-x64-musl": "4.30.1", - "@rollup/rollup-win32-arm64-msvc": "4.30.1", - "@rollup/rollup-win32-ia32-msvc": "4.30.1", - "@rollup/rollup-win32-x64-msvc": "4.30.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", - "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", - "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", - "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", - "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", - "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", - "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", - "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", - "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", - "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", - "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", - "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", - "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", - "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", - "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", - "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", - "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", - "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/rollup/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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "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" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "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" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.83.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass-loader": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.4.1", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^3.0.0", - "@sigstore/tuf": "^3.0.0", - "@sigstore/verify": "^2.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "dev": true, - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "12.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "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" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "5.37.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/thingies": { - "version": "1.21.0", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=10.18" - }, - "peerDependencies": { - "tslib": "^2" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-dump": { - "version": "1.0.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.40", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/unique-slug": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "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" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "6.0.11", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "express": "^4.21.2", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "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" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "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/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "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" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "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" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.17.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "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" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.15.0", - "license": "MIT" - } - } -} diff --git a/app/components/ui/package.json b/app/components/ui/package.json deleted file mode 100644 index 66d4befd..00000000 --- a/app/components/ui/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "ACE", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve --host 0.0.0.0 --disable-host-check", - "start-local": "/opt/homebrew/opt/node@18/bin/node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --disable-host-check", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test --watch=false --browsers=ChromeHeadless", - "test-local": "/opt/homebrew/opt/node@18/bin/node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng test --watch=false --browsers=ChromeHeadless" - }, - "private": true, - "dependencies": { - "@angular/animations": "^19.1.0", - "@angular/cdk": "^19.1.2", - "@angular/common": "^19.1.0", - "@angular/compiler": "^19.1.0", - "@angular/core": "^19.1.0", - "@angular/forms": "^19.1.0", - "@angular/material": "^19.1.2", - "@angular/platform-browser": "^19.1.0", - "@angular/platform-browser-dynamic": "^19.1.0", - "@angular/router": "^19.1.0", - "@ngrx/component": "^19.0.1", - "@ngrx/data": "^19.0.1", - "@ngrx/effects": "^19.0.1", - "@ngrx/entity": "^19.0.1", - "@ngrx/store": "^19.0.1", - "@ngrx/store-devtools": "^19.0.1", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.15.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^19.1.5", - "@angular/cli": "^19.1.5", - "@angular/compiler-cli": "^19.1.0", - "@types/jasmine": "~5.1.0", - "jasmine-core": "~5.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.7.2" - } -} diff --git a/app/components/ui/public/favicon.ico b/app/components/ui/public/favicon.ico deleted file mode 100644 index 57614f9c..00000000 Binary files a/app/components/ui/public/favicon.ico and /dev/null differ diff --git a/app/components/ui/src/app/app.component.html b/app/components/ui/src/app/app.component.html deleted file mode 100644 index 5089ac9d..00000000 --- a/app/components/ui/src/app/app.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
- - - - @for (item of sidebarItems(); track item.name) { - - - {{ item.icon }} - - - } - - - - - - - - - @if ( uiSettings?.show_footer ) { - - } -
diff --git a/app/components/ui/src/app/app.component.scss b/app/components/ui/src/app/app.component.scss deleted file mode 100644 index 43696191..00000000 --- a/app/components/ui/src/app/app.component.scss +++ /dev/null @@ -1,35 +0,0 @@ -.page-root { - display: flex; - flex-direction: column; - height: 100%; - - .sidebar-root { - height: 100%; - - .sidebar { - width: 3.5rem; - display: grid; - align-content: center; - outline: auto; - border-radius: 0; - - .sidebar-item { - margin-bottom: 1rem; - - .active-link { - background-color: rgba(0, 0, 0, 0.04); - } - } - } - } -} - -.footer { - display: flex; - align-items: center; - justify-content: center; - height: 2rem; - gap: 2rem; - outline: auto; - background-color: gray; -} diff --git a/app/components/ui/src/app/app.component.ts b/app/components/ui/src/app/app.component.ts deleted file mode 100644 index ba524871..00000000 --- a/app/components/ui/src/app/app.component.ts +++ /dev/null @@ -1,108 +0,0 @@ -// DEPENDENCIES -//// Angular -import { Component, inject, OnInit, signal } from "@angular/core"; -import { MatButtonModule } from "@angular/material/button"; -import { MatIconModule } from "@angular/material/icon"; -import { MatListModule } from "@angular/material/list"; -import { MatTooltipModule } from "@angular/material/tooltip"; -import { MatSidenavModule } from "@angular/material/sidenav"; -import { RouterModule, RouterOutlet } from "@angular/router"; -import { Store } from "@ngrx/store"; -//// Local -import { ThemeService } from "./theme"; -import { IAppVersionData } from "./models/app.models"; -import { ISettings, IUISettings } from "./models/settings.models"; -import { appActions } from "./store/app/app.actions"; -import { settingsActions } from "./store/settings/settings.actions"; -import { selectAppVersionDataState } from './store/app/app.selectors'; -import { selectSettingsState } from "./store/settings/settings.selectors"; - - -// TYPES -export type SidebarItem = { - name: string, - icon: string, - route?: string, -} - - -// COMPONENT -@Component({ - selector: "app-root", - imports: [ - MatButtonModule, - MatIconModule, - MatListModule, - MatSidenavModule, - MatTooltipModule, - RouterModule, - RouterOutlet - ], - templateUrl: "./app.component.html", - styleUrl: "./app.component.scss" -}) -export class AppComponent implements OnInit { - // Variables - title = "ACE"; - themeService = inject(ThemeService); - sidebarItems = signal([ - { - name: "Home", - icon: "home", - route: "" - }, - { - name: "Dashboard", - icon: "dashboard", - route: "dashboard" - }, - { - name: "Chat", - icon: "chat", - route: "chat" - }, - { - name: "Model Garden", - icon: "local_florist", - route: "model-garden" - }, - { - name: "Settings", - icon: "settings", - route: "settings" - } - ]) - - settings?: ISettings; - uiSettings?: IUISettings; - appVersionData?: IAppVersionData; - - // Initialisation - constructor(private store: Store) {} - - ngOnInit(): void { - this.store.dispatch(appActions.getAppVersionData()); - this.store.select(selectAppVersionDataState).subscribe( version_data => this.appVersionData = version_data ); - this.store.dispatch(settingsActions.getSettings()); - this.store.select(selectSettingsState).subscribe( settings => { - this.settings = settings.settings; - this.uiSettings = settings.settings.ui_settings; - this.themeService.setDarkMode(this.uiSettings.dark_mode); - }) - } - - toggleDarkMode() { - if (!this.settings) { - return; - } - this.store.dispatch(settingsActions.editSettings({ - settings: { - ...this.settings, - ui_settings: { - ...this.settings.ui_settings, - dark_mode: !this.settings.ui_settings.dark_mode - } - } - })) - } -} diff --git a/app/components/ui/src/app/app.config.ts b/app/components/ui/src/app/app.config.ts deleted file mode 100644 index 5d78379a..00000000 --- a/app/components/ui/src/app/app.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -// DEPENDENCIES -//// Angular -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; -import { provideHttpClient } from '@angular/common/http'; -import { provideRouter } from '@angular/router'; -import { provideEffects } from '@ngrx/effects'; -import { provideStore } from '@ngrx/store'; -import { provideStoreDevtools } from '@ngrx/store-devtools'; -//// Local -import { routes } from './app.routes'; -import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; -import { AppEffects } from './store/app/app.effects'; -import { modelProviderEffects } from './store/model-provider/model-provider.effects'; -import { SettingsEffects } from './store/settings/settings.effects'; -import { appReducer } from './store/app/app.reducers'; -import { modelProviderReducer } from './store/model-provider/model-provider.reducers'; -import { settingsReducer } from './store/settings/settings.reducers'; - - -// CONFIG -export const appConfig: ApplicationConfig = { - providers: [ - provideAnimationsAsync(), - provideEffects([AppEffects, modelProviderEffects, SettingsEffects]), - provideHttpClient(), - provideStore({ app_data: appReducer, model_provider: modelProviderReducer, settings: settingsReducer }), - provideStoreDevtools({ - maxAge: 25, - logOnly: false - }), - provideRouter(routes), - provideZoneChangeDetection({ eventCoalescing: true }) - ] -}; diff --git a/app/components/ui/src/app/app.routes.ts b/app/components/ui/src/app/app.routes.ts deleted file mode 100644 index 0f8f38a3..00000000 --- a/app/components/ui/src/app/app.routes.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Routes } from "@angular/router"; -import { HomeComponent } from "./pages/home/home.component"; -import { DashboardComponent } from "./pages/dashboard/dashboard.component"; -import { ChatComponent } from "./pages/chat/chat.component"; -import { ModelGardenComponent } from "./pages/model_garden/model-garden.component"; -import { SettingsComponent } from "./pages/settings/settings.component"; - -export const routes: Routes = [ - { path: "", component: HomeComponent }, - { path: "dashboard", component: DashboardComponent }, - { path: "chat", component: ChatComponent }, - { path: "model-garden", component: ModelGardenComponent }, - { path: "settings", component: SettingsComponent }, -]; diff --git a/app/components/ui/src/app/constants.ts b/app/components/ui/src/app/constants.ts deleted file mode 100644 index 513b4859..00000000 --- a/app/components/ui/src/app/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const Values = { - NOT_LOADED: "not_loaded", -} - -const ROOT = "/"; -export const APIRoutes = { - ROOT, - MODEL_PROVIDER: `${ROOT}model-provider/`, -} diff --git a/app/components/ui/src/app/environment.ts b/app/components/ui/src/app/environment.ts deleted file mode 100644 index 5aa9e8e7..00000000 --- a/app/components/ui/src/app/environment.ts +++ /dev/null @@ -1,5 +0,0 @@ -const defaultClusterURL: string = `http://127.0.0.1`; - -export const environmentURLs = { - controller: defaultClusterURL + ":2349" -}; diff --git a/app/components/ui/src/app/models/app.models.ts b/app/components/ui/src/app/models/app.models.ts deleted file mode 100644 index a5512edc..00000000 --- a/app/components/ui/src/app/models/app.models.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface IAppVersionData { - version: string - authors: string[] - license: string - last_update: string - rebuild_date: string -} diff --git a/app/components/ui/src/app/models/model-provider.models.ts b/app/components/ui/src/app/models/model-provider.models.ts deleted file mode 100644 index c6ee0862..00000000 --- a/app/components/ui/src/app/models/model-provider.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface ILLMModelProvider { - id: string; - model_provider: string; - name: string; - model_name: string; - default: boolean; - max_input_tokens: number; - max_output_tokens: number; - cost_per_million_input_tokens: number; - cost_per_million_output_tokens: number; - knowledge_cutoff: string; - rate_limits: string; -} diff --git a/app/components/ui/src/app/models/settings.models.ts b/app/components/ui/src/app/models/settings.models.ts deleted file mode 100644 index d967bc75..00000000 --- a/app/components/ui/src/app/models/settings.models.ts +++ /dev/null @@ -1,52 +0,0 @@ -// SECTIONS -//// UI -export interface IUISettings { - dark_mode: boolean; - show_footer: boolean; -} - -//// Layers -export interface ILayerSetting { - layer_name: string; - model_type: string; -} - -//// Model Provider -////// Unique Providers -export interface IIndividualProviderSettings { - name: string; - enabled: boolean; - api_key: string; -} - -////// Model Types -export interface ILLMModelTypeSettings { - model_type: string; - model_id: string; - logical_temperature: number; - creative_temperature: number; - output_token_limit: number; -} - -////// Full -export interface IModelProviderSetting { - individual_provider_settings: IIndividualProviderSettings[]; - - three_d_model_type_settings: string[]; - audio_model_type_settings: string[]; - image_model_type_settings: string[]; - llm_model_type_settings: ILLMModelTypeSettings[]; - multimodal_model_type_settings: string[]; - rag_model_type_settings: string[]; - robotics_model_type_settings: string[]; - video_model_type_settings: string[]; -} - - -// FULL SETTINGS -export interface ISettings { - ace_name: string; - ui_settings: IUISettings; - layer_settings: ILayerSetting[]; - model_provider_settings: IModelProviderSetting; -} diff --git a/app/components/ui/src/app/pages/chat/chat.component.html b/app/components/ui/src/app/pages/chat/chat.component.html deleted file mode 100644 index a0cd3a87..00000000 --- a/app/components/ui/src/app/pages/chat/chat.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Chat

-
diff --git a/app/components/ui/src/app/pages/chat/chat.component.scss b/app/components/ui/src/app/pages/chat/chat.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/chat/chat.component.ts b/app/components/ui/src/app/pages/chat/chat.component.ts deleted file mode 100644 index 931b7061..00000000 --- a/app/components/ui/src/app/pages/chat/chat.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-chat", - imports: [], - templateUrl: "./chat.component.html", - styleUrl: "./chat.component.scss" -}) -export class ChatComponent {} diff --git a/app/components/ui/src/app/pages/dashboard/dashboard.component.html b/app/components/ui/src/app/pages/dashboard/dashboard.component.html deleted file mode 100644 index 045c851a..00000000 --- a/app/components/ui/src/app/pages/dashboard/dashboard.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Dashboard

-
diff --git a/app/components/ui/src/app/pages/dashboard/dashboard.component.scss b/app/components/ui/src/app/pages/dashboard/dashboard.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/dashboard/dashboard.component.ts b/app/components/ui/src/app/pages/dashboard/dashboard.component.ts deleted file mode 100644 index 762676bf..00000000 --- a/app/components/ui/src/app/pages/dashboard/dashboard.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-dashboard", - imports: [], - templateUrl: "./dashboard.component.html", - styleUrl: "./dashboard.component.scss" -}) -export class DashboardComponent {} diff --git a/app/components/ui/src/app/pages/home/home.component.html b/app/components/ui/src/app/pages/home/home.component.html deleted file mode 100644 index 6ada622b..00000000 --- a/app/components/ui/src/app/pages/home/home.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Home

-
diff --git a/app/components/ui/src/app/pages/home/home.component.scss b/app/components/ui/src/app/pages/home/home.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/home/home.component.ts b/app/components/ui/src/app/pages/home/home.component.ts deleted file mode 100644 index d597d757..00000000 --- a/app/components/ui/src/app/pages/home/home.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-home", - imports: [], - templateUrl: "./home.component.html", - styleUrl: "./home.component.scss" -}) -export class HomeComponent {} diff --git a/app/components/ui/src/app/pages/model_garden/model-garden.component.html b/app/components/ui/src/app/pages/model_garden/model-garden.component.html deleted file mode 100644 index c5e86298..00000000 --- a/app/components/ui/src/app/pages/model_garden/model-garden.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Model Garden

-
diff --git a/app/components/ui/src/app/pages/model_garden/model-garden.component.scss b/app/components/ui/src/app/pages/model_garden/model-garden.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/model_garden/model-garden.component.ts b/app/components/ui/src/app/pages/model_garden/model-garden.component.ts deleted file mode 100644 index 78f400bd..00000000 --- a/app/components/ui/src/app/pages/model_garden/model-garden.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-model-garden", - imports: [], - templateUrl: "./model-garden.component.html", - styleUrl: "./model-garden.component.scss" -}) -export class ModelGardenComponent {} diff --git a/app/components/ui/src/app/pages/settings/settings.component.html b/app/components/ui/src/app/pages/settings/settings.component.html deleted file mode 100644 index dd933d4e..00000000 --- a/app/components/ui/src/app/pages/settings/settings.component.html +++ /dev/null @@ -1,90 +0,0 @@ -
-

Settings

- - @if (settingsForm) { -
-

General:

-
- - Ace Name - - @if (aceNameControl?.hasError("required")) { - Please enter a name for the ace - } - @if (aceNameControl?.hasError("maxlength")) { - Max length of 32 characters - } - -
- - - -

UI:

-
- Dark Mode - Show Footer -
- - - -

Model Provider:

-
-

Individual Model Providers:

-
- @for (provider of individualModelProviderSettingsControl.controls; track provider.value?.name; let i = $index) { - @if (provider.get("name")?.value !== "ollama") { -

{{ formatSnakeCase(provider.get('name')?.value) }}

-
- Enabled - - API Key - - -
- } - } -
-
- - - -

ACE Layers:

-
- @for (layerSetting of layerSettingsControl.controls; track layerSetting; let i = $index) { -
-

{{ formatSnakeCase(layerSetting.value?.layer_name || "") }} Layer:

- - Model Type - - @for (type of llmModelTypes; track type) { - {{ formatSnakeCase(type) }} - } - - -
- } -
- - - -

About:

-
-

Developed by {{ appVersionData.authors.join(", ") }}

-

Version: v{{ appVersionData.version }}

-

License: {{ appVersionData.license }}

-

Last Update: {{ appVersionData.last_update }}

-

Last Container Image Update: {{ appVersionData.rebuild_date }}

-

- -
-
- - - } -
diff --git a/app/components/ui/src/app/pages/settings/settings.component.scss b/app/components/ui/src/app/pages/settings/settings.component.scss deleted file mode 100644 index 62facf61..00000000 --- a/app/components/ui/src/app/pages/settings/settings.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -.save-button { - position: sticky; - float: right; - bottom: 1rem; -} diff --git a/app/components/ui/src/app/pages/settings/settings.component.ts b/app/components/ui/src/app/pages/settings/settings.component.ts deleted file mode 100644 index 6a6a8985..00000000 --- a/app/components/ui/src/app/pages/settings/settings.component.ts +++ /dev/null @@ -1,191 +0,0 @@ -// DEPENDENCIES -//// Angular -import { Component, OnInit } from "@angular/core"; -import { Store } from "@ngrx/store"; -import { filter, take } from "rxjs"; -import { FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; -import { MatButtonModule } from "@angular/material/button"; -import { MatDividerModule } from "@angular/material/divider"; -import { MatIconModule } from "@angular/material/icon"; -import { MatInputModule } from "@angular/material/input"; -import { MatFormFieldModule } from "@angular/material/form-field"; -import { MatSelectModule } from "@angular/material/select"; -import { MatSlideToggleModule } from "@angular/material/slide-toggle"; -//// Local -import { IAppVersionData } from "../../models/app.models"; -import { ILLMModelProvider } from "../../models/model-provider.models"; -import { IModelProviderSetting, ISettings } from "../../models/settings.models"; -import { modelProviderActions } from "../../store/model-provider/model-provider.actions"; -import { selectAppVersionDataState } from "../../store/app/app.selectors"; -import { selectLLMModelTypes } from "../../store/model-provider/model-provider.selectors"; -import { settingsActions } from "../../store/settings/settings.actions"; -import { selectSettingsState } from "../../store/settings/settings.selectors"; - -@Component({ - selector: "page-settings", - imports: [ - ReactiveFormsModule, - MatButtonModule, - MatDividerModule, - MatIconModule, - MatInputModule, - MatFormFieldModule, - MatSelectModule, - MatSlideToggleModule - ], - templateUrl: "./settings.component.html", - styleUrl: "./settings.component.scss" -}) -export class SettingsComponent implements OnInit { - appVersionData!: IAppVersionData; - llmModels: ILLMModelProvider[] = []; - llmModelTypes: string[] = []; - selectedLLMModelType: string = ""; - settings!: ISettings; - - settingsForm!: FormGroup; - generalForm!: FormGroup; - uiSettingsForm!: FormGroup; - modelProviderForm!: FormGroup; - layerSettingsForm!: FormArray; - - changesDetected: boolean = false; - - constructor( - private formBuilder: FormBuilder, - private store: Store - ) { - this.initialiseForm(); - } - - ngOnInit(): void { - this.store.select(selectAppVersionDataState).subscribe( version_data => this.appVersionData = version_data ); - this.store.dispatch(modelProviderActions.getLLMModels()); - this.store.dispatch(modelProviderActions.getLLMModelTypes()); - this.store.select(selectLLMModelTypes).pipe( - filter((model_types: string[]): model_types is string[] => model_types.length > 0), - take(1) - ).subscribe(model_types => { - this.llmModelTypes = model_types; - this.initialiseForm(); - }); - - this.store.dispatch(settingsActions.getSettings()); - this.store.select(selectSettingsState).subscribe(settings => { - this.settings = settings.settings; - this.patchFormValues(); - }); - } - - private initialiseForm(): void { - this.generalForm = this.formBuilder.group({ - ace_name: ["", [Validators.required, Validators.maxLength(32)]] - }); - - this.uiSettingsForm = this.formBuilder.group({ - dark_mode: [true], - show_footer: [true] - }); - - this.layerSettingsForm = this.formBuilder.array([]); - - this.modelProviderForm = this.formBuilder.group({ - individual_provider_settings: this.formBuilder.array([]), - three_d_model_type_settings: this.formBuilder.array([]), - audio_model_type_settings: this.formBuilder.array([]), - image_model_type_settings: this.formBuilder.array([]), - llm_model_type_settings: this.formBuilder.array([]), - rag_model_type_settings: this.formBuilder.array([]) - }); - - this.settingsForm = this.formBuilder.group({ - ...this.generalForm.controls, - ui_settings: this.uiSettingsForm, - layer_settings: this.layerSettingsForm, - model_provider_settings: this.modelProviderForm - }); - - this.settingsForm.valueChanges.subscribe(() => { - this.changesDetected = true; - }); - } - - private patchFormValues(): void { - if (!this.settings) return; - - this.initialiseForm(); - - this.generalForm.patchValue({ - ace_name: this.settings.ace_name, - }); - - this.uiSettingsForm.patchValue({ - dark_mode: this.settings.ui_settings.dark_mode, - show_footer: this.settings.ui_settings.show_footer - }); - - const modelProviderSettings: IModelProviderSetting = this.settings.model_provider_settings; - this.individualModelProviderSettingsControl?.clear(); - - modelProviderSettings.individual_provider_settings.forEach(provider => { - this.individualModelProviderSettingsControl?.push( - this.formBuilder.group({ - name: [provider.name], - enabled: [provider.enabled], - api_key: [provider.api_key] - }) - ); - }); - - this.layerSettingsForm.clear(); - this.settings.layer_settings.forEach(layer => { - this.layerSettingsForm.push( - this.formBuilder.group({ - layer_name: [layer?.layer_name || "", Validators.required], - model_type: [layer?.model_type || "", Validators.required] - }) - ); - }); - - this.settingsForm.markAsPristine(); - this.changesDetected = false; - } - - formatSnakeCase(layerName?: string): string { - return (layerName || "") - .split("_") - .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(" "); - } - - onReset() { - this.store.dispatch(settingsActions.resetSettings()); - } - - onSave() { - if (!this.settingsForm.valid) { - return; - } - const updatedSettings = { - ...this.settings, - ...this.settingsForm.value - }; - - this.changesDetected = false; - this.settingsForm.markAsPristine(); - - this.store.dispatch(settingsActions.editSettings({ settings: updatedSettings })); - } - - get aceNameControl() { - return this.generalForm.get("ace_name"); - } - - get individualModelProviderSettingsControl(): FormArray { - return this.modelProviderForm.get("individual_provider_settings") as FormArray; - } - - get layerSettingsControl(): FormArray { - return this.layerSettingsForm; - } -} diff --git a/app/components/ui/src/app/services/app.service.ts b/app/components/ui/src/app/services/app.service.ts deleted file mode 100644 index 978589fd..00000000 --- a/app/components/ui/src/app/services/app.service.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from 'rxjs/internal/Observable'; -import { APIRoutes } from "../constants"; -import { environmentURLs } from "../environment"; - - -export type HttpListResponseFailure = { status: string, message: string }; - - -const endpoints = { - getAppVersionData: `${environmentURLs.controller}${APIRoutes.ROOT}version`, -}; - - -@Injectable({ - providedIn: "root" -}) -export class AppService { - constructor(private http: HttpClient) { } - - getAppVersionData(): Observable { - return this.http.get(endpoints.getAppVersionData); - } -} diff --git a/app/components/ui/src/app/services/model-provider.service.ts b/app/components/ui/src/app/services/model-provider.service.ts deleted file mode 100644 index 59316f7c..00000000 --- a/app/components/ui/src/app/services/model-provider.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from 'rxjs/internal/Observable'; -import { APIRoutes } from "../constants"; -import { environmentURLs } from "../environment"; - - -export type HttpListResponseFailure = { status: string, message: string }; - -const endpoints = { - getLLMModels: `${environmentURLs.controller}${APIRoutes.MODEL_PROVIDER}llm/models`, - getLLMModelTypes: `${environmentURLs.controller}${APIRoutes.MODEL_PROVIDER}llm/model-types` -}; - - -@Injectable({ - providedIn: "root" -}) -export class ModelProviderService { - constructor(private http: HttpClient) { } - - getLLMModelTypes(): Observable { - return this.http.get(endpoints.getLLMModelTypes); - } - - getLLMModels(): Observable { - return this.http.get(endpoints.getLLMModels); - } -} diff --git a/app/components/ui/src/app/services/settings.service.ts b/app/components/ui/src/app/services/settings.service.ts deleted file mode 100644 index 9b5ef034..00000000 --- a/app/components/ui/src/app/services/settings.service.ts +++ /dev/null @@ -1,39 +0,0 @@ -// DEPENDENCIES -//// Built-In -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from 'rxjs/internal/Observable'; -//// Local -import { APIRoutes } from "../constants"; -import { environmentURLs } from "../environment"; -import { ISettings } from "../models/settings.models"; - - -export type HttpListResponseFailure = { status: string, message: string }; - - -const endpoints = { - getSettings: `${environmentURLs.controller}${APIRoutes.ROOT}settings`, - editSettings: `${environmentURLs.controller}${APIRoutes.ROOT}settings`, - resetSettings: `${environmentURLs.controller}${APIRoutes.ROOT}settings` -}; - - -@Injectable({ - providedIn: "root" -}) -export class SettingsService { - constructor(private http: HttpClient) { } - - getSettings(): Observable { - return this.http.get(endpoints.getSettings); - } - - editSettings(settings: ISettings): Observable { - return this.http.post(endpoints.editSettings, settings); - } - - resetSettings(): Observable { - return this.http.delete(endpoints.resetSettings); - } -} diff --git a/app/components/ui/src/app/state/app.state.ts b/app/components/ui/src/app/state/app.state.ts deleted file mode 100644 index 3c776314..00000000 --- a/app/components/ui/src/app/state/app.state.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createDefaultLoadable, Loadable } from "./loadable.state"; -import { IAppVersionData } from "../models/app.models"; - -export interface AppState extends Loadable { - version_data: IAppVersionData; -} - -export function createInitialAppState(): AppState { - return { - ...createDefaultLoadable(), - version_data: { - version: "0", - authors: [], - license: "", - last_update: "", - rebuild_date: "" - } - } -} - - diff --git a/app/components/ui/src/app/state/loadable.state.ts b/app/components/ui/src/app/state/loadable.state.ts deleted file mode 100644 index 920f3982..00000000 --- a/app/components/ui/src/app/state/loadable.state.ts +++ /dev/null @@ -1,35 +0,0 @@ -export interface Loadable { - loading: boolean; - error: any; -} - -export function createDefaultLoadable(): Loadable { - return { - loading: false, - error: null, - }; -} - -export function onLoadableLoad(loadable: T): T { - return { - ...(loadable as any), - loading: true, - error: null, - } as T; -} - -export function onLoadableSuccess(loadable: T): T { - return { - ...(loadable as any), - loading: false, - error: null, - } as T; -} - -export function onLoadableError(loadable: T, error: any): T { - return { - ...(loadable as any), - loading: false, - error: error, - } as T; -} diff --git a/app/components/ui/src/app/state/model-provider.state.ts b/app/components/ui/src/app/state/model-provider.state.ts deleted file mode 100644 index 8ec60837..00000000 --- a/app/components/ui/src/app/state/model-provider.state.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createDefaultLoadable, Loadable } from "./loadable.state"; -import { ILLMModelProvider } from "../models/model-provider.models"; - -export interface ModelProviderLLMState extends Loadable { - models: ILLMModelProvider[], - model_types: string[] -} - -export interface ModelProviderState extends Loadable { - llm: ModelProviderLLMState -} - -export function createInitialModelProviderState(): ModelProviderState { - return { - ...createDefaultLoadable(), - llm: { - ...createDefaultLoadable(), - models: [], - model_types: [] - } - } -} diff --git a/app/components/ui/src/app/state/settings.state.ts b/app/components/ui/src/app/state/settings.state.ts deleted file mode 100644 index 74deea82..00000000 --- a/app/components/ui/src/app/state/settings.state.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { createDefaultLoadable, Loadable } from "./loadable.state"; -import { Values } from '../constants' -import { ISettings } from "../models/settings.models"; - -export interface SettingsState extends Loadable { - settings: ISettings; -} - -export function createInitialSettingsState(): SettingsState { - return { - ...createDefaultLoadable(), - settings: { - ace_name: Values.NOT_LOADED, - ui_settings: { - dark_mode: true, - show_footer: true - }, - layer_settings: [], - model_provider_settings: { - individual_provider_settings: [], - three_d_model_type_settings: [], - audio_model_type_settings: [], - image_model_type_settings: [], - llm_model_type_settings: [ - { - model_type: Values.NOT_LOADED, - model_id: Values.NOT_LOADED, - logical_temperature: 0, - creative_temperature: 0, - output_token_limit: 0 - } - ], - multimodal_model_type_settings: [], - rag_model_type_settings: [], - robotics_model_type_settings: [], - video_model_type_settings: [] - } - } - } -} - - diff --git a/app/components/ui/src/app/store/app/app.actions.ts b/app/components/ui/src/app/store/app/app.actions.ts deleted file mode 100644 index a23f2b89..00000000 --- a/app/components/ui/src/app/store/app/app.actions.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createActionGroup, props, emptyProps } from "@ngrx/store"; -import { IAppVersionData } from "../../models/app.models"; - -export const appActions = createActionGroup({ - source: "app", - events: { - getAppVersionData: emptyProps(), - getAppVersionDataSuccess: props<{ version_data: IAppVersionData }>(), - getAppVersionDataFailure: props<{ error: Error }>() - }, -}); diff --git a/app/components/ui/src/app/store/app/app.effects.ts b/app/components/ui/src/app/store/app/app.effects.ts deleted file mode 100644 index f00ed801..00000000 --- a/app/components/ui/src/app/store/app/app.effects.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { inject, Injectable } from "@angular/core"; -import { createEffect, ofType, Actions } from "@ngrx/effects"; -import { map, catchError, of, switchMap } from "rxjs"; -import { appActions } from "./app.actions"; -import { IAppVersionData } from "../../models/app.models"; -import { AppService } from "../../services/app.service"; - - -@Injectable() -export class AppEffects { - private actions$ = inject(Actions); - - getACEVersionData$ = createEffect(() => this.actions$.pipe( - ofType(appActions.getAppVersionData), - switchMap(() => this.appService.getAppVersionData().pipe( - map((version_data: IAppVersionData) => appActions.getAppVersionDataSuccess({ version_data })), - catchError(error => of(appActions.getAppVersionDataFailure({ error }))) - )) - )) - - constructor( - private appService: AppService - ) { } -} diff --git a/app/components/ui/src/app/store/app/app.reducers.ts b/app/components/ui/src/app/store/app/app.reducers.ts deleted file mode 100644 index 9fba4927..00000000 --- a/app/components/ui/src/app/store/app/app.reducers.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createReducer, on } from "@ngrx/store"; -import { onLoadableError, onLoadableLoad, onLoadableSuccess } from "../../state/loadable.state"; -import { appActions } from "./app.actions"; -import { createInitialAppState } from "../../state/app.state"; - -export const appReducer = createReducer( - createInitialAppState(), - on(appActions.getAppVersionData, state => ({...onLoadableLoad(state)})), - on(appActions.getAppVersionDataSuccess, (state, { version_data }) => ({...onLoadableSuccess(state), version_data: {...version_data}})), - on(appActions.getAppVersionDataFailure, (state, { error }) => ({...onLoadableError(state, error)})) -) diff --git a/app/components/ui/src/app/store/app/app.selectors.ts b/app/components/ui/src/app/store/app/app.selectors.ts deleted file mode 100644 index 86260c17..00000000 --- a/app/components/ui/src/app/store/app/app.selectors.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createSelector, createFeatureSelector } from "@ngrx/store"; -import { AppState } from "../../state/app.state"; - -export const selectAppState = createFeatureSelector("app_data"); -export const selectAppVersionDataState = createSelector(selectAppState, (state: AppState) => state.version_data); diff --git a/app/components/ui/src/app/store/model-provider/model-provider.actions.ts b/app/components/ui/src/app/store/model-provider/model-provider.actions.ts deleted file mode 100644 index f691e8a6..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.actions.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createActionGroup, props, emptyProps } from "@ngrx/store"; -import { ILLMModelProvider } from "../../models/model-provider.models"; - -export const modelProviderActions = createActionGroup({ - source: "model_provider", - events: { - getLLMModels: emptyProps(), - getLLMModelsSuccess: props<{ models: ILLMModelProvider[] }>(), - getLLMModelsFailure: props<{ error: Error }>(), - getLLMModelTypes: emptyProps(), - getLLMModelTypesSuccess: props<{ model_types: string[] }>(), - getLLMModelTypesFailure: props<{ error: Error }>() - }, -}); diff --git a/app/components/ui/src/app/store/model-provider/model-provider.effects.ts b/app/components/ui/src/app/store/model-provider/model-provider.effects.ts deleted file mode 100644 index 0927fb69..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.effects.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { inject, Injectable } from "@angular/core"; -import { createEffect, ofType, Actions } from "@ngrx/effects"; -import { map, catchError, of, switchMap } from "rxjs"; -import { modelProviderActions } from "./model-provider.actions"; -import { ILLMModelProvider } from "../../models/model-provider.models"; -import { ModelProviderService } from "../../services/model-provider.service"; - - -@Injectable() -export class modelProviderEffects { - private actions$ = inject(Actions); - - getLLMModels$ = createEffect(() => this.actions$.pipe( - ofType(modelProviderActions.getLLMModels), - switchMap(() => this.modelProviderService.getLLMModels().pipe( - map((models: ILLMModelProvider[]) => modelProviderActions.getLLMModelsSuccess({ models })), - catchError(error => of(modelProviderActions.getLLMModelsFailure({ error }))) - )) - )) - - getLLMModelTypes$ = createEffect(() => this.actions$.pipe( - ofType(modelProviderActions.getLLMModelTypes), - switchMap(() => this.modelProviderService.getLLMModelTypes().pipe( - map((model_types: string[]) => modelProviderActions.getLLMModelTypesSuccess({ model_types })), - catchError(error => of(modelProviderActions.getLLMModelTypesFailure({ error }))) - )) - )) - - constructor( - private modelProviderService: ModelProviderService - ) { } -} diff --git a/app/components/ui/src/app/store/model-provider/model-provider.reducers.ts b/app/components/ui/src/app/store/model-provider/model-provider.reducers.ts deleted file mode 100644 index 4e29710b..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.reducers.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { createReducer, on } from "@ngrx/store"; -import { onLoadableError, onLoadableLoad, onLoadableSuccess } from "../../state/loadable.state"; -import { modelProviderActions } from "./model-provider.actions"; -import { createInitialModelProviderState } from "../../state/model-provider.state"; - -export const modelProviderReducer = createReducer( - createInitialModelProviderState(), - on(modelProviderActions.getLLMModels, state => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableLoad(state.llm) - } - })), - on(modelProviderActions.getLLMModelsSuccess, (state, { models }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableSuccess(state.llm), - models: models - } - })), - on(modelProviderActions.getLLMModelsFailure, (state, { error }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableError(state.llm, error) - } - })), - on(modelProviderActions.getLLMModelTypes, state => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableLoad(state.llm) - } - })), - on(modelProviderActions.getLLMModelTypesSuccess, (state, { model_types }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableSuccess(state.llm), - model_types: model_types - } - })), - on(modelProviderActions.getLLMModelTypesFailure, (state, { error }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableError(state.llm, error) - } - })) -) diff --git a/app/components/ui/src/app/store/model-provider/model-provider.selectors.ts b/app/components/ui/src/app/store/model-provider/model-provider.selectors.ts deleted file mode 100644 index 10cc0209..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.selectors.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createFeatureSelector, createSelector } from "@ngrx/store"; -import { ModelProviderState } from "../../state/model-provider.state"; - -export const selectModelProviderState = createFeatureSelector("model_provider"); -export const selectLLMModels = createSelector(selectModelProviderState, (state: ModelProviderState) => state.llm.models); -export const selectLLMModelTypes = createSelector(selectModelProviderState, (state: ModelProviderState) => state.llm.model_types); diff --git a/app/components/ui/src/app/store/settings/settings.actions.ts b/app/components/ui/src/app/store/settings/settings.actions.ts deleted file mode 100644 index bb61a909..00000000 --- a/app/components/ui/src/app/store/settings/settings.actions.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createActionGroup, props, emptyProps } from "@ngrx/store"; -import { ISettings } from "../../models/settings.models"; - -export const settingsActions = createActionGroup({ - source: "settings", - events: { - getSettings: emptyProps(), - getSettingsSuccess: props<{ settings: ISettings }>(), - getSettingsFailure: props<{ error: Error }>(), - editSettings: props<{ settings: ISettings }>(), - editSettingsSuccess: emptyProps(), - editSettingsFailure: props<{ error: Error }>(), - resetSettings: emptyProps(), - resetSettingsSuccess: emptyProps(), - resetSettingsFailure: props<{ error: Error }>() - }, -}); diff --git a/app/components/ui/src/app/store/settings/settings.effects.ts b/app/components/ui/src/app/store/settings/settings.effects.ts deleted file mode 100644 index f1faf3d5..00000000 --- a/app/components/ui/src/app/store/settings/settings.effects.ts +++ /dev/null @@ -1,53 +0,0 @@ -// DEPENDENCIES -//// Angular -import { inject, Injectable } from "@angular/core"; -import { createEffect, ofType, Actions } from "@ngrx/effects"; -import { map, catchError, of, switchMap } from "rxjs"; -//// Local -import { settingsActions } from "./settings.actions"; -import { ISettings } from "../../models/settings.models"; -import { SettingsService } from "../../services/settings.service"; - - -@Injectable() -export class SettingsEffects { - private actions$ = inject(Actions); - - getSettings$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.getSettings), - switchMap(() => this.settingsService.getSettings().pipe( - map((settings: ISettings) => settingsActions.getSettingsSuccess({ settings })), - catchError(error => of(settingsActions.getSettingsFailure({ error }))) - )) - )) - - editSettings$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.editSettings), - switchMap(({ settings }) => this.settingsService.editSettings(settings).pipe( - map(() => settingsActions.getSettings()), - catchError(error => of(settingsActions.editSettingsFailure({ error }))) - )) - )) - - editSettingsSuccess$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.editSettingsSuccess), - map(() => settingsActions.getSettings()) - )); - - resetSettings$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.resetSettings), - switchMap(() => this.settingsService.resetSettings().pipe( - map(() => settingsActions.resetSettingsSuccess()), - catchError(error => of(settingsActions.resetSettingsFailure({ error }))) - )) - )) - - resetSettingsSuccess$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.resetSettingsSuccess), - map(() => settingsActions.getSettings()) - )); - - constructor( - private settingsService: SettingsService - ) { } -} diff --git a/app/components/ui/src/app/store/settings/settings.reducers.ts b/app/components/ui/src/app/store/settings/settings.reducers.ts deleted file mode 100644 index dd6c8616..00000000 --- a/app/components/ui/src/app/store/settings/settings.reducers.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createReducer, on } from "@ngrx/store"; -import { onLoadableError, onLoadableLoad, onLoadableSuccess } from "../../state/loadable.state"; -import { settingsActions } from "./settings.actions"; -import { createInitialSettingsState } from "../../state/settings.state"; - -export const settingsReducer = createReducer( - createInitialSettingsState(), - on(settingsActions.getSettings, state => ({...onLoadableLoad(state)})), - on(settingsActions.getSettingsSuccess, (state, { settings }) => ({...onLoadableSuccess(state), settings: {...settings}})), - on(settingsActions.getSettingsFailure, (state, { error }) => ({...onLoadableError(state, error)})) -) diff --git a/app/components/ui/src/app/store/settings/settings.selectors.ts b/app/components/ui/src/app/store/settings/settings.selectors.ts deleted file mode 100644 index b7eb338e..00000000 --- a/app/components/ui/src/app/store/settings/settings.selectors.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { createFeatureSelector, createSelector } from "@ngrx/store"; -import { SettingsState } from "../../state/settings.state"; - -export const selectSettingsState = createFeatureSelector("settings"); diff --git a/app/components/ui/src/app/theme.ts b/app/components/ui/src/app/theme.ts deleted file mode 100644 index dff6206b..00000000 --- a/app/components/ui/src/app/theme.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Injectable, signal } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; - -@Injectable({ - providedIn: 'root' -}) -export class ThemeService { - private darkModeSubject = new BehaviorSubject(false); - darkMode$ = this.darkModeSubject.asObservable(); - - setDarkMode(enabled: boolean) { - this.darkModeSubject.next(enabled); - if (enabled) { - document.body.classList.add('dark'); - } else { - document.body.classList.remove('dark'); - } - } -} diff --git a/app/components/ui/src/index.html b/app/components/ui/src/index.html deleted file mode 100644 index f85205d2..00000000 --- a/app/components/ui/src/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Ui - - - - - - - - - - diff --git a/app/components/ui/src/main.ts b/app/components/ui/src/main.ts deleted file mode 100644 index df42ea9e..00000000 --- a/app/components/ui/src/main.ts +++ /dev/null @@ -1,9 +0,0 @@ -// DEPENDENCIES -//// Angular -import { bootstrapApplication } from '@angular/platform-browser'; -//// Local -import { appConfig } from './app/app.config'; -import { AppComponent } from './app/app.component'; - - -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); diff --git a/app/components/ui/src/styles.scss b/app/components/ui/src/styles.scss deleted file mode 100644 index ee87f520..00000000 --- a/app/components/ui/src/styles.scss +++ /dev/null @@ -1,30 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ - -html, body { - height: 100%; - overscroll-behavior: none; -} -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } - -.main-page { - position: relative; - padding-top: 1rem; - padding-left: 3rem; - padding-right: 3rem; - padding-bottom: 1rem; -} - -.subsection { - display: flex; - padding-left: 1rem; - padding-right: 1rem; - flex-direction: column; - - &.multi-input { - row-gap: 0.75rem; - } - - .subsection-divider { - margin-top: 1rem; - } -} diff --git a/app/components/ui/src/theme.scss b/app/components/ui/src/theme.scss deleted file mode 100644 index 2f53fa75..00000000 --- a/app/components/ui/src/theme.scss +++ /dev/null @@ -1,128 +0,0 @@ -/* These tokens are generated using https://themes.angular-material.dev/ */ -/* Preview: https://themes.angular-material.dev/?seed-error=%23ffb4ab&seed-neutral=%23767778&seed-neutral-variant=%2371787a&seed-primary=%233D636B&seed-secondary=%23bac9cd&seed-tertiary=%23d1c0e4 */ -/* Seed Colors: primary: #3D636B, secondary: #bac9cd, tertiary: #d1c0e4, error: #ffb4ab, neutral: #767778, neutral-variant: #71787a */ - -@use "@angular/material" as mat; - - -/* Light Theme */ -:root, :host { - @include mat.theme-overrides(( - primary: #3e646c, - on-primary: #ffffff, - primary-container: #c1e9f3, - on-primary-container: #001f25, - inverse-primary: #a6cdd6, - primary-fixed: #c1e9f3, - primary-fixed-dim: #a6cdd6, - on-primary-fixed: #001f25, - on-primary-fixed-variant: #254c54, - secondary: #536164, - on-secondary: #ffffff, - secondary-container: #d6e5e9, - on-secondary-container: #101e21, - secondary-fixed: #d6e5e9, - secondary-fixed-dim: #bac9cd, - on-secondary-fixed: #101e21, - on-secondary-fixed-variant: #3b494d, - tertiary: #665978, - on-tertiary: #ffffff, - tertiary-container: #eddcff, - on-tertiary-container: #211631, - tertiary-fixed: #eddcff, - tertiary-fixed-dim: #d1c0e4, - on-tertiary-fixed: #211631, - on-tertiary-fixed-variant: #4e415f, - background: #fcf8f8, - on-background: #1c1b1b, - surface: #fcf8f8, - surface-dim: #ddd9d9, - surface-bright: #fcf8f8, - surface-container-lowest: #ffffff, - surface-container-low: #f7f3f2, - surface-container: #f1edec, - surface-container-high: #ebe7e7, - surface-container-highest: #e5e2e1, - on-surface: #1c1b1b, - shadow: #000000, - scrim: #000000, - surface-tint: #5d5e5f, - inverse-surface: #313030, - inverse-on-surface: #f4f0ef, - outline: #747779, - outline-variant: #c3c7c8, - neutral: #797776, - neutral10: #1c1b1b, - error: #ba1a1a, - error-container: #ffdad6, - on-error: #ffffff, - on-error-container: #410002, - surface-variant: #dfe3e4, - on-surface-variant: #434749, - neutral-variant: #747879, - neutral-variant20: #2d3132, - inverse-secondary: #bac9cd, - inverse-tertiary: #d1c0e4, - )); -} - -/* Dark Theme */ -.dark { - @include mat.theme-overrides(( - primary: #a6cdd6, - on-primary: #0a353d, - primary-container: #254c54, - on-primary-container: #c1e9f3, - inverse-primary: #3e646c, - primary-fixed: #c1e9f3, - primary-fixed-dim: #a6cdd6, - on-primary-fixed: #001f25, - on-primary-fixed-variant: #254c54, - secondary: #bac9cd, - on-secondary: #253336, - secondary-container: #3b494d, - on-secondary-container: #d6e5e9, - secondary-fixed: #d6e5e9, - secondary-fixed-dim: #bac9cd, - on-secondary-fixed: #101e21, - on-secondary-fixed-variant: #3b494d, - tertiary: #d1c0e4, - on-tertiary: #372b47, - tertiary-container: #4e415f, - on-tertiary-container: #eddcff, - tertiary-fixed: #eddcff, - tertiary-fixed-dim: #d1c0e4, - on-tertiary-fixed: #211631, - on-tertiary-fixed-variant: #4e415f, - background: #141313, - on-background: #e5e2e1, - surface: #141313, - surface-dim: #141313, - surface-bright: #3a3939, - surface-container-lowest: #0e0e0e, - surface-container-low: #1c1b1b, - surface-container: #201f1f, - surface-container-high: #2a2a2a, - surface-container-highest: #353434, - on-surface: #e5e2e1, - shadow: #000000, - scrim: #000000, - surface-tint: #c6c6c7, - inverse-surface: #e5e2e1, - inverse-on-surface: #313030, - outline: #8e9193, - outline-variant: #434749, - neutral: #797776, - neutral10: #1c1b1b, - error: #ffb4ab, - error-container: #93000a, - on-error: #690005, - on-error-container: #ffdad6, - surface-variant: #434749, - on-surface-variant: #c3c7c8, - neutral-variant: #747879, - neutral-variant20: #2d3132, - inverse-secondary: #536164, - inverse-tertiary: #665978, - )); -} diff --git a/app/components/ui/start.py b/app/components/ui/start.py deleted file mode 100644 index 6899a0e8..00000000 --- a/app/components/ui/start.py +++ /dev/null @@ -1,15 +0,0 @@ -# DEPENDENCIES -## Built-in -import os -## Local -from constants import ShellCommands -from logger import logger -from shell import execute_shell - -def start_ui(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") - module_path: str = os.path.dirname(os.path.abspath(__file__)) - os.chdir(module_path) - execute_shell(ShellCommands.INSTALL_NPM_DEPENDENCIES) - if dev: - execute_shell(ShellCommands.RUN_UI_DEV) diff --git a/app/components/ui/tsconfig.app.json b/app/components/ui/tsconfig.app.json deleted file mode 100644 index 3775b37e..00000000 --- a/app/components/ui/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/app/components/ui/tsconfig.json b/app/components/ui/tsconfig.json deleted file mode 100644 index 5525117c..00000000 --- a/app/components/ui/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "compileOnSave": false, - "compilerOptions": { - "outDir": "./dist/out-tsc", - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "skipLibCheck": true, - "isolatedModules": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "moduleResolution": "bundler", - "importHelpers": true, - "target": "ES2022", - "module": "ES2022" - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/app/components/ui/tsconfig.spec.json b/app/components/ui/tsconfig.spec.json deleted file mode 100644 index 5fb748d9..00000000 --- a/app/components/ui/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/app/constants/__init__.py b/app/constants/__init__.py deleted file mode 100644 index 96e898ad..00000000 --- a/app/constants/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -from .api_routes import APIRoutes -from .components import Components -from .container_folders import ContainerFolders -from .defaults import Defaults -from .dict_keys import DictKeys -from .environment_variables import EnvironmentVariables -from .folders import Folders # Folders need to be created before files! -from .files import Files -from .layer_types import LayerTypes -from .logger import CustomLogLevels, TERMINAL_COLOR_CODES -from .model_providers import ModelProviders -from .model_types import ModelTypes, ThreeDModelTypes, ImageModelTypes, AudioModelTypes, LLMModelTypes, MultiModalModelTypes, RAGModelTypes, RoboticsModelTypes, VideoModelTypes -from .names import Names -from .network import NetworkPorts -from .shell_commands import ShellCommands diff --git a/app/constants/api_routes.py b/app/constants/api_routes.py deleted file mode 100644 index 0d0f159d..00000000 --- a/app/constants/api_routes.py +++ /dev/null @@ -1,9 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class APIRoutes(BaseEnum): - """Enum""" - ROOT: str = "/" - MODEL_PROVIDER: str = f"{ROOT}model-provider/" diff --git a/app/constants/base_enum.py b/app/constants/base_enum.py deleted file mode 100644 index 00a2693b..00000000 --- a/app/constants/base_enum.py +++ /dev/null @@ -1,39 +0,0 @@ -# DEPENDENCIES -## Built-in -from abc import ABC -import inspect - - -# ENUMS -class BaseEnum(ABC): - """Base Enum Class""" - _ALLOWED_ENUM_TYPES: tuple[type, ...] = (str, int, float) - - def __init_subclass__(cls, **kwargs): - super().__init_subclass__(**kwargs) - for attr_name in dir(cls): - if attr_name.startswith("__") or attr_name.startswith("_"): - continue - # Skip methods - attr = getattr(cls, attr_name) - if inspect.ismethod(attr) or inspect.isfunction(attr): - continue - if not isinstance(attr, cls._ALLOWED_ENUM_TYPES): - raise TypeError(f"Attribute '{attr_name}' must be of type {cls._ALLOWED_ENUM_TYPES}") - - @classmethod - def get_dict(cls) -> dict[str, str]: - base_enum_dict: dict[str, str] = { - variable_name: value - for variable_name, value in vars(cls).items() - if not variable_name.startswith("__") and not variable_name.startswith("_") - } - return base_enum_dict - - @classmethod - def get_tuple(cls) -> tuple[str, ...]: - return tuple(cls.get_dict().values()) - - @classmethod - def get_frozenset(cls) -> frozenset[str]: - return frozenset(cls.get_tuple()) diff --git a/app/constants/components.py b/app/constants/components.py deleted file mode 100644 index 7c6d994c..00000000 --- a/app/constants/components.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class Components(BaseEnum): - """Enum""" - CONTROLLER: str = "controller" - UI: str = "ui" - QUEUE: str = "queue" - TELEMETRY: str = "telemetry" - ACTIONS: str = "actions" - MEMORY: str = "memory" - MODEL_PROVIDER: str = "model_provider" - ASPIRATIONAL: str = "aspirational" - GLOBAL_STRATEGY: str = "global_strategy" - AGENT_MODEL: str = "agent_model" - EXECUTIVE_FUNCTION: str = "executive_function" - COGNITIVE_CONTROL: str = "cognitive_control" - TASK_PROSECUTION: str = "task_prosecution" diff --git a/app/constants/container_folders.py b/app/constants/container_folders.py deleted file mode 100644 index 77875aba..00000000 --- a/app/constants/container_folders.py +++ /dev/null @@ -1,17 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum -from .folders import Folders - - -class ContainerFolders(BaseEnum): - """Enum""" - APP_DIR: str = "/home/ace/" - # Logging - LOGS: str = f"{APP_DIR}{Folders.LOGS}" - # Storage - STORAGE: str = f"{APP_DIR}{Folders.STORAGE}" - CONTROLLER_STORAGE: str = f"{STORAGE}controller" - LAYERS_STORAGE: str = f"{STORAGE}layers" - MODEL_PROVIDER_STORAGE: str = f"{STORAGE}model_provider" - OUTPUT_STORAGE: str = f"{STORAGE}output" diff --git a/app/constants/defaults.py b/app/constants/defaults.py deleted file mode 100644 index 3472c9d4..00000000 --- a/app/constants/defaults.py +++ /dev/null @@ -1,17 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class Defaults(BaseEnum): - # API - INTERNAL_SERVER_ERROR_MESSAGE: str = "Server experienced an internal error!" - # Layers - ACE_NAME: str = "PrototypeACE" - # Model Provider - CREATIVE_TEMPERATURE: float = 0.7 - LOGICAL_TEMPERATURE: float = 0.2 - OUTPUT_TOKEN_LIMIT: int = 2048 - # Logger - TERMINAL_COLOR_CODE: str = "\033[0m" # Default color - SHUTDOWN_MESSAGE: str = "Shutting down logger..." diff --git a/app/constants/dict_keys.py b/app/constants/dict_keys.py deleted file mode 100644 index 7f0fe16b..00000000 --- a/app/constants/dict_keys.py +++ /dev/null @@ -1,22 +0,0 @@ -# DEPENDENCIES -# Local -from .base_enum import BaseEnum - - -class DictKeys(BaseEnum): - ACE_NAME: str = "ace_name" - DEV: str = "dev" - BUILD: str = "build" - FUNCTION_NAME: str = "function_name" - LAYER_SETTINGS: str = "layer_settings" - LEVEL: str = "level" - MESSAGE: str = "message" - MODEL_PROVIDER: str = "model_provider" - MODEL_PROVIDER_SETTINGS: str = "model_provider_settings" - PROD: str = "prod" - REBUILD_DATE: str = "rebuild_date" - RESTART: str = "restart" - STACKTRACE: str = "stacktrace" - STOP: str = "stop" - TEMPERATURE: str = "temperature" - TIMESTAMP: str = "timestamp" diff --git a/app/constants/environment_variables.py b/app/constants/environment_variables.py deleted file mode 100644 index 744883f3..00000000 --- a/app/constants/environment_variables.py +++ /dev/null @@ -1,8 +0,0 @@ -# DEPENDENCIES -# Local -from .base_enum import BaseEnum - - -class EnvironmentVariables(BaseEnum): - LOG_FILE_NAME: str = "ACE_LOGGER_FILE_NAME" - LOGGER_VERBOSE: str = "ACE_LOGGER_VERBOSE" diff --git a/app/constants/files.py b/app/constants/files.py deleted file mode 100644 index 31f23f5b..00000000 --- a/app/constants/files.py +++ /dev/null @@ -1,116 +0,0 @@ -# DEPENDENCIES -## Built-in -import os -import json -## Local -from .base_enum import BaseEnum -from .components import Components -from .container_folders import ContainerFolders -from .environment_variables import EnvironmentVariables -from .folders import Folders -from .names import Names -from .network import NetworkPorts - - -class Files(BaseEnum): - """Enum""" - # Containers - CONTAINERFILE: str = f"{Folders.CONTAINERS}Containerfile" - TEMPLATE_DEPLOYMENT_FILE: str = f"{Folders.CONTAINERS}template_deployment.yaml" - USER_DEPLOYMENT_FILE: str = f"{Folders.CONTAINERS}.user_deployment.yaml" - # Startup - STARTUP_HISTORY: str = f"{Folders.STORAGE}.startup_history" - VERSION: str = "version" - # Storage - CONTROLLER_SETTINGS: str = f"{Folders.CONTROLLER_STORAGE}.settings" - CONTROLLER_THREE_D_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.three_d_models" - CONTROLLER_AUDIO_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.audio_models" - CONTROLLER_IMAGE_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.image_models" - CONTROLLER_LLM_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.llm_models" - CONTROLLER_MULTIMODAL_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.multimodal_models" - CONTROLLER_RAG_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.rag_models" - CONTROLLER_ROBOTICS_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.robotics_models" - CONTROLLER_VIDEO_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.video_models" - - -# INIT -_ENSURE_JSON_FILES: frozenset[str] = frozenset([ - Files.STARTUP_HISTORY, - Files.CONTROLLER_SETTINGS, - Files.CONTROLLER_THREE_D_MODELS, - Files.CONTROLLER_AUDIO_MODELS, - Files.CONTROLLER_IMAGE_MODELS, - Files.CONTROLLER_LLM_MODELS, - Files.CONTROLLER_MULTIMODAL_MODELS, - Files.CONTROLLER_RAG_MODELS, - Files.CONTROLLER_ROBOTICS_MODELS, - Files.CONTROLLER_VIDEO_MODELS -]) -def _ensure_json_files(): - for file in _ENSURE_JSON_FILES: - if not os.path.isfile(file): - with open(file, "w", encoding="utf-8") as file: - json.dump({}, file) -_ensure_json_files() - -_DEPLOYMENT_REPLACE_KEYWORDS: dict[str, str] = { - "{{ ace_pod_name }}": Names.ACE, - "{{ ace_image_name }}": Names.FULL_IMAGE, - "{{ start_command }}": """python3\n - component.py\n - --{{ env }}""", - "{{ app_host_path }}": os.getcwd(), - "{{ app_container_path }}": ContainerFolders.APP_DIR, - "{{ app_volume }}": f"{Names.ACE}_app_{Names.VOLUME}", - "{{ logs_host_path }}": Folders.HOST_LOGS, - "{{ logs_container_path }}": ContainerFolders.LOGS, - "{{ logs_volume }}": f"{Names.ACE}_logs_{Names.VOLUME}", - "{{ logger_name_env }}": EnvironmentVariables.LOG_FILE_NAME, - "{{ logger_verbose_env }}": EnvironmentVariables.LOGGER_VERBOSE, - "{{ controller_name }}": Components.CONTROLLER, - "{{ controller_port }}": NetworkPorts.CONTROLLER, - "{{ ui_name }}": Components.UI, - "{{ ui_port }}": NetworkPorts.UI, - "{{ queue_name }}": Components.QUEUE, - "{{ queue_port }}": NetworkPorts.QUEUE, - "{{ model_provider_name }}": Components.MODEL_PROVIDER, - "{{ model_provider_port }}": NetworkPorts.MODEL_PROVIDER, - "{{ telemetry_name }}": Components.TELEMETRY, - "{{ telemetry_port }}": NetworkPorts.TELEMETRY, - "{{ actions_name }}": Components.ACTIONS, - "{{ actions_port }}": NetworkPorts.ACTIONS, - "{{ memory_name }}": Components.MEMORY, - "{{ memory_port }}": NetworkPorts.MEMORY, - "{{ aspirational_name }}": Components.ASPIRATIONAL, - "{{ aspirational_port }}": NetworkPorts.ASPIRATIONAL, - "{{ global_strategy_name }}": Components.GLOBAL_STRATEGY, - "{{ global_strategy_port }}": NetworkPorts.GLOBAL_STRATEGY, - "{{ agent_model_name }}": Components.AGENT_MODEL, - "{{ agent_model_port }}": NetworkPorts.AGENT_MODEL, - "{{ executive_function_name }}": Components.EXECUTIVE_FUNCTION, - "{{ executive_function_port }}": NetworkPorts.EXECUTIVE_FUNCTION, - "{{ cognitive_control_name }}": Components.COGNITIVE_CONTROL, - "{{ cognitive_control_port }}": NetworkPorts.COGNITIVE_CONTROL, - "{{ task_prosecution_name }}": Components.TASK_PROSECUTION, - "{{ task_prosecution_port }}": NetworkPorts.TASK_PROSECUTION, - "{{ controller_host_path }}": Folders.CONTROLLER_STORAGE, - "{{ controller_container_path }}": ContainerFolders.CONTROLLER_STORAGE, - "{{ controller_volume }}": f"{Names.ACE}_{Components.CONTROLLER}_{Names.VOLUME}", - "{{ output_host_path }}": Folders.OUTPUT_STORAGE, - "{{ output_container_path }}": ContainerFolders.OUTPUT_STORAGE, - "{{ output_volume }}": f"{Names.ACE}_output_{Names.VOLUME}" -} -def setup_user_deployment_file(dev: bool): - """Sets up the user deployment file""" - if os.path.isfile(Files.USER_DEPLOYMENT_FILE): - os.remove(Files.USER_DEPLOYMENT_FILE) - with open(Files.TEMPLATE_DEPLOYMENT_FILE, "r", encoding="utf-8") as template_deployment_file: - deployment_string: str = template_deployment_file.read() - template_deployment_file.close() - dev_env: str = "" if dev else "." - deployment_string = deployment_string.replace("{{ dev_env }}", dev_env) - for key, replace_string in _DEPLOYMENT_REPLACE_KEYWORDS.items(): - if key == "{{ start_command }}": - replace_string = replace_string.replace("{{ env }}", "dev" if dev else "prod") - deployment_string = deployment_string.replace(key, replace_string) - with open(Files.USER_DEPLOYMENT_FILE, "w", encoding="utf-8") as user_deployment_file: - user_deployment_file.write(deployment_string) - user_deployment_file.close() diff --git a/app/constants/folders.py b/app/constants/folders.py deleted file mode 100644 index 4247bc07..00000000 --- a/app/constants/folders.py +++ /dev/null @@ -1,35 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -## Local -from .base_enum import BaseEnum - - -class Folders(BaseEnum): - """Enum""" - # Containers - CONTAINERS: str = "containers/" - # Logging - LOGS: str = ".logs/" - HOST_LOGS: str = f"{os.getcwd()}/{LOGS}" - # Storage - STORAGE: str = ".storage/" - _HOST_STORAGE: str = f"{os.getcwd()}/{STORAGE}" - CONTROLLER_STORAGE: str = f"{_HOST_STORAGE}controller/" - CONTROLLER_MODEL_TYPES: str = f"{CONTROLLER_STORAGE}model_types/" - OUTPUT_STORAGE: str = f"{_HOST_STORAGE}output/" - - -# INIT -_ENSURED_FOLDERS: tuple[str, ...] = ( - Folders.LOGS, - Folders.STORAGE, - Folders.CONTROLLER_STORAGE, - Folders.CONTROLLER_MODEL_TYPES, - Folders.OUTPUT_STORAGE -) - -def _ensure_folders(): - for path in _ENSURED_FOLDERS: - os.makedirs(path, exist_ok=True) -_ensure_folders() diff --git a/app/constants/layer_types.py b/app/constants/layer_types.py deleted file mode 100644 index 8b45a521..00000000 --- a/app/constants/layer_types.py +++ /dev/null @@ -1,13 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum -from .components import Components - - -class LayerTypes(BaseEnum): - ASPIRATIONAL: str = Components.ASPIRATIONAL - GLOBAL_STRATEGY: str = Components.GLOBAL_STRATEGY - AGENT_MODEL: str = Components.AGENT_MODEL - EXECUTIVE_FUNCTION: str = Components.EXECUTIVE_FUNCTION - COGNITIVE_CONTROL: str = Components.COGNITIVE_CONTROL - TASK_PROSECUTION: str = Components.TASK_PROSECUTION diff --git a/app/constants/logger.py b/app/constants/logger.py deleted file mode 100644 index 857f687a..00000000 --- a/app/constants/logger.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Built-In -import logging -## Local -from .base_enum import BaseEnum - - -class CustomLogLevels(BaseEnum): - STARTUP: int = 25 - STACKTRACE: int = 45 - -TERMINAL_COLOR_CODES: dict[int, str] = { - logging.DEBUG: "\033[35m", # Purple - CustomLogLevels.STARTUP: "\033[36m", # Cyan - logging.INFO: "\033[34m", # Blue - logging.WARNING: "\033[33m", # Yellow - logging.ERROR: "\033[31m", # Red - CustomLogLevels.STACKTRACE: "\033[37m", # White - logging.CRITICAL: "\033[30m", # Black -} diff --git a/app/constants/model_providers.py b/app/constants/model_providers.py deleted file mode 100644 index cc109b46..00000000 --- a/app/constants/model_providers.py +++ /dev/null @@ -1,13 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class ModelProviders(BaseEnum): - ANTHROPIC: str = "anthropic" - DEEPSEEK: str = "deepseek" - GOOGLE_VERTEX_AI: str = "google_vertex_ai" - GROK: str = "grok" - GROQ: str = "groq" - OLLAMA: str = "ollama" - OPENAI: str = "openai" diff --git a/app/constants/model_types.py b/app/constants/model_types.py deleted file mode 100644 index 1edd62f9..00000000 --- a/app/constants/model_types.py +++ /dev/null @@ -1,49 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -# BASE -class ModelTypes(BaseEnum): - THREE_D: str = "3d" - AUDIO: str = "audio" - IMAGE: str = "image" - LLM: str = "llm" - MULTIMODAL: str = "multimodal" - RAG: str = "rag" - ROBOTICS: str = "robotics" - VIDEO: str = "video" - - -# INDIVIDUAL -class ThreeDModelTypes(BaseEnum): - THREED_MODEL_GENERATOR: str = "3d_model_generator" - -class AudioModelTypes(BaseEnum): - AUDIO_GENERATOR: str = "audio_generator" - AUDIO_TRANSCRIPTIONIST: str = "audio_transcriptionist" - -class ImageModelTypes(BaseEnum): - IMAGE_GENERATOR: str = "image_generator" - -class LLMModelTypes(BaseEnum): - CODER: str = "coder" - EFFICIENT: str = "efficient" - FUNCTION_CALLER: str = "function_caller" - GENERALIST: str = "generalist" - REASONER: str = "reasoner" - -class MultiModalModelTypes(BaseEnum): - AUDIO_ONLY_MULTIMODAL: str = "audio_only_multimodal" - FULLY_MULTIMODAL: str = "fully_multimodal" - IMAGE_ONLY_MULTIMODAL: str = "image_only_multimodal" - -class RAGModelTypes(BaseEnum): - EMBEDDER: str = "embedder" - RERANKER: str = "reranker" - -class RoboticsModelTypes(BaseEnum): - ROBOTICS_CONTROLLER: str = "robotics_controller" - -class VideoModelTypes(BaseEnum): - VIDEO_GENERATOR: str = "video_generator" diff --git a/app/constants/names.py b/app/constants/names.py deleted file mode 100644 index 99fb3bff..00000000 --- a/app/constants/names.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class Names(BaseEnum): - ACE: str = "ace" - IMAGE: str = ACE - FULL_IMAGE: str = f"localhost/{IMAGE}:latest" - NETWORK: str = f"{ACE}_network" - VOLUME: str = "volume" diff --git a/app/constants/network.py b/app/constants/network.py deleted file mode 100644 index 11a05ecd..00000000 --- a/app/constants/network.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class NetworkPorts(BaseEnum): - """Enum""" - CONTROLLER: str = "2349" - UI: str = "2350" - QUEUE: str = "4222" - MODEL_PROVIDER: str = "4223" - TELEMETRY: str = "4931" - ACTIONS: str = "4932" - MEMORY: str = "4933" - ASPIRATIONAL: str = "4581" - GLOBAL_STRATEGY: str = "4582" - AGENT_MODEL: str = "4583" - EXECUTIVE_FUNCTION: str = "4584" - COGNITIVE_CONTROL: str = "4585" - TASK_PROSECUTION: str = "4586" diff --git a/app/constants/shell_commands.py b/app/constants/shell_commands.py deleted file mode 100644 index 1dd35cbb..00000000 --- a/app/constants/shell_commands.py +++ /dev/null @@ -1,25 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum -from .files import Files -from .names import Names - - -class ShellCommands(BaseEnum): - UPDATE: str = "git pull" - # Containers - ## Deployment - CHECK_PODS: str = "podman pod ps" - _DEPLOY_KUBE_COMMAND: str = "podman kube play" - DEPLOY_CLUSTER: str = f"{_DEPLOY_KUBE_COMMAND} --network {Names.NETWORK} --replace {Files.USER_DEPLOYMENT_FILE}" - STOP_CLUSTER: str = f"{_DEPLOY_KUBE_COMMAND} --network {Names.NETWORK} --down {Files.USER_DEPLOYMENT_FILE}" - ## Images - CHECK_IMAGES: str = "podman images" - BUILD_IMAGE: str = f"podman build -t {Names.IMAGE} -f {Files.CONTAINERFILE} ." - CLEAR_OLD_IMAGES: str = "podman image prune --force" - ## Network - CHECK_NETWORK: str = "podman network ls" - CREATE_NETWORK: str = f"podman network create {Names.NETWORK}" - # UI - INSTALL_NPM_DEPENDENCIES: str = "npm install" - RUN_UI_DEV: str = "npm start" diff --git a/app/containers/Containerfile b/app/containers/Containerfile deleted file mode 100644 index bf4c1250..00000000 --- a/app/containers/Containerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.13-bookworm - -COPY ./requirements /home/requirements - -RUN apt-get update && apt-get install -y libffi-dev nats-server nodejs npm && \ - pip install -r /home/requirements && \ - apt-get purge -y libffi-dev python3-dev && \ - npm install -g @angular/cli && \ - cd /home/ace/components/ui && \ - npm install && \ - ng analytics off && \ - rm -rf /var/cache/* - -RUN mkdir /home/ace -WORKDIR /home/ace diff --git a/app/containers/template_deployment.yaml b/app/containers/template_deployment.yaml deleted file mode 100644 index 5cb1dc9c..00000000 --- a/app/containers/template_deployment.yaml +++ /dev/null @@ -1,252 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - labels: - app: {{ ace_pod_name }} - name: {{ ace_pod_name }} -spec: - containers: - - command: - - {{ start_command }} - - --{{ controller_name }} - image: {{ ace_image_name }} - name: {{ controller_name }} - env: - - name: {{ logger_name_env }} - value: {{ controller_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ controller_port }} - hostPort: {{ controller_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ controller_container_path }} - name: {{ controller_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ ui_name }} - image: {{ ace_image_name }} - name: {{ ui_name }} - env: - - name: {{ logger_name_env }} - value: {{ ui_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: 4200 - hostPort: {{ ui_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ queue_name }} - image: {{ ace_image_name }} - name: {{ queue_name }} - env: - - name: {{ logger_name_env }} - value: {{ queue_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ queue_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ model_provider_name }} - image: {{ ace_image_name }} - name: {{ model_provider_name }} - env: - - name: {{ logger_name_env }} - value: {{ model_provider_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ model_provider_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ telemetry_name }} - image: {{ ace_image_name }} - name: {{ telemetry_name }} - env: - - name: {{ logger_name_env }} - value: {{ telemetry_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ telemetry_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ actions_name }} - image: {{ ace_image_name }} - name: {{ actions_name }} - env: - - name: {{ logger_name_env }} - value: {{ actions_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ actions_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ memory_name }} - image: {{ ace_image_name }} - name: {{ memory_name }} - env: - - name: {{ logger_name_env }} - value: {{ memory_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ memory_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ aspirational_name }} - image: {{ ace_image_name }} - name: {{ aspirational_name }} - env: - - name: {{ logger_name_env }} - value: {{ aspirational_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ aspirational_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ global_strategy_name }} - image: {{ ace_image_name }} - name: {{ global_strategy_name }} - env: - - name: {{ logger_name_env }} - value: {{ global_strategy_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ global_strategy_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ agent_model_name }} - image: {{ ace_image_name }} - name: {{ agent_model_name }} - env: - - name: {{ logger_name_env }} - value: {{ agent_model_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ agent_model_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ executive_function_name }} - image: {{ ace_image_name }} - name: {{ executive_function_name }} - env: - - name: {{ logger_name_env }} - value: {{ executive_function_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ executive_function_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ cognitive_control_name }} - image: {{ ace_image_name }} - name: {{ cognitive_control_name }} - env: - - name: {{ logger_name_env }} - value: {{ cognitive_control_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ cognitive_control_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ task_prosecution_name }} - image: {{ ace_image_name }} - name: {{ task_prosecution_name }} - env: - - name: {{ logger_name_env }} - value: {{ task_prosecution_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ task_prosecution_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ output_container_path }} - name: {{ output_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - volumes: - - hostPath: - path: {{ app_host_path }} - type: Directory - name: {{ app_volume }} - - hostPath: - path: {{ logs_host_path }} - type: Directory - name: {{ logs_volume }} - - hostPath: - path: {{ controller_host_path }} - type: Directory - name: {{ controller_volume }} - - hostPath: - path: {{ output_host_path }} - type: Directory - name: {{ output_volume }} diff --git a/app/logger.py b/app/logger.py deleted file mode 100644 index d7d42b00..00000000 --- a/app/logger.py +++ /dev/null @@ -1,168 +0,0 @@ -# DEPENDENCIES -## Built-In -import atexit -import datetime -import inspect -import json -import logging -import os -import re -import signal -import sys -import traceback -## Local -from constants import CustomLogLevels, Defaults, DictKeys, EnvironmentVariables, Folders, TERMINAL_COLOR_CODES - - -# INITIALISATION -logging.addLevelName(CustomLogLevels.STARTUP, "STARTUP") -logging.addLevelName(CustomLogLevels.STACKTRACE, "STACKTRACE") - - -# Private -## Formatters -class _JSONFormatter(logging.Formatter): - def format(self, record: logging.LogRecord): - log_data: dict[str, str] = { - DictKeys.TIMESTAMP: datetime.datetime.now(datetime.UTC).isoformat(), - DictKeys.LEVEL: record.levelname, - DictKeys.FUNCTION_NAME: f"{record.name}()", - DictKeys.MESSAGE: record.getMessage(), - } - # check if record has attr stacktrace and then add that to dict - if hasattr(record, DictKeys.STACKTRACE): - stacktrace: str = re.sub(r"[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]", "", record.stacktrace).replace("\n", " | ").replace("'", '').replace('"', '') - log_data[DictKeys.STACKTRACE] = stacktrace - return json.dumps(log_data, ensure_ascii=False) - -class _HumanReadableFormatter(logging.Formatter): - def format(self, record: logging.LogRecord) -> str: - color_code: str = TERMINAL_COLOR_CODES.get(record.levelno, Defaults.TERMINAL_COLOR_CODE) - - log_string = "" - log_string += datetime.datetime.now(datetime.UTC).strftime("%Y-%m-%d %H:%M:%S") - log_string += " | " - log_string += f"{color_code}{record.levelname}{Defaults.TERMINAL_COLOR_CODE}" - log_string += " | " - log_string += f"{record.name}()" - log_string += " | " - log_string += record.getMessage() - - return log_string - - -## Logger Class -class _Logger: - _instance: "_Logger" = None - _initialised: bool - - def __new__(cls, *args, **kwargs): - if cls._instance is not None: - return cls._instance - cls._instance = super(_Logger, cls).__new__(cls) - cls._instance._initialised = False - cls._instance.__init__(*args, **kwargs) - return cls._instance - - def __init__(self, log_name: str, verbose: bool = False): - if self._initialised: - return - self._initialised = True - - log_file: str = os.path.join(Folders.LOGS, f"{log_name}_{datetime.datetime.now(datetime.UTC).strftime('%Y-%m-%d')}.log") - log_file = os.path.abspath(log_file) - - self.verbose = verbose - - self.logger: logging.Logger = logging.getLogger() - self.logger.setLevel(logging.INFO) - - self.logger.handlers: list[logging.Handler] = [] - self.logger.handlers.clear() - - self.file_handler = logging.FileHandler(log_file) - self.file_handler.setFormatter(_JSONFormatter()) - self.logger.addHandler(self.file_handler) - - self.console_handler: logging.StreamHandler | None = None - if not self.verbose: - self.console_handler = logging.StreamHandler(sys.stdout) - self.console_handler.setFormatter(_HumanReadableFormatter()) - self.logger.addHandler(self.console_handler) - - self._register_shutdown_handlers() - - def _register_shutdown_handlers(self): - def shutdown_handler(): - self.logger.warning(Defaults.SHUTDOWN_MESSAGE) - self.file_handler.close() - if self.console_handler: - self.console_handler.close() - self.logger.handlers = [] - logging.shutdown() - - signal.signal(signal.SIGINT, shutdown_handler) - signal.signal(signal.SIGTERM, shutdown_handler) - atexit.register(shutdown_handler) - - def _log(self, level: int, message: str, stacktrace: str | None = None): - caller_frame: inspect.FrameInfo = inspect.currentframe().f_back.f_back - func_name: str = caller_frame.f_code.co_name - - record = logging.LogRecord( - name=func_name, - level=level, - pathname=caller_frame.f_code.co_filename, - lineno=caller_frame.f_lineno, - msg=message, - args=(), - exc_info=None - ) - record.verbose = self.verbose - if stacktrace: - record.stacktrace = stacktrace - - self.logger.handle(record) - if stacktrace and not self.verbose: - print(stacktrace) - - - def debug(self, message: str): - if not self.verbose: - self._log(logging.DEBUG, message) - - def startup(self, message: str): - self._log(CustomLogLevels.STARTUP, message) - - def info(self, message: str): - self._log(logging.INFO, message) - - def warn(self, message: str): - self._log(logging.WARNING, message) - - def error(self, message: str): - stacktrace: str = "".join(traceback.format_stack()[:-1]) - self._log(logging.ERROR, message, stacktrace) - - def critical(self, message: str): - stacktrace: str = "".join(traceback.format_stack()[:-1]) - self._log(logging.CRITICAL, message, stacktrace) - - -# PUBLIC -if not os.environ.get(EnvironmentVariables.LOG_FILE_NAME): - raise SystemError("You need to initialise the ace logger envs first before using it!") -logger = _Logger( - log_name=os.environ.get(EnvironmentVariables.LOG_FILE_NAME), - verbose=bool(os.environ.get(EnvironmentVariables.LOGGER_VERBOSE, False)) -) - - -# EXAMPLES -def example_logs(): - logger.startup("Hello ACE!") - logger.debug("Dev logs...") - logger.info("Operations logs...") - logger.warn("Warning logs...") - logger.error("Error logs...") - logger.critical("Critical logs...") diff --git a/app/models/__init__.py b/app/models/__init__.py deleted file mode 100644 index 511074ad..00000000 --- a/app/models/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger -from .config.defaults import DEFAULT_LLM_MODEL_TYPE_SETTINGS -from .data.required import REQUIRED_LLM_MODEL_TYPES - - -# TODO: Orchestrate data checks, validation and population here - -def _initialise_database_with_defaults(): - # TODO: Implement this - pass - -def _verify_required_model_types(): - def _verify_required_model_type(category: str, default_settings: list, required_types: frozenset[str]): - verified_types: list[str] = [] - for type_setting in default_settings: - if type_setting.model_type in verified_types: - continue - if type_setting.model_type in required_types: - verified_types.append(type_setting.model_type) - if len(verified_types) != len(required_types): - raise ValueError(f"Missing required LLM types: {required_types - set(verified_types)}") - - _verify_required_model_type( - category="LLM", - default_settings=DEFAULT_LLM_MODEL_TYPE_SETTINGS, - required_types=REQUIRED_LLM_MODEL_TYPES - ) - -def initialise(): - _initialise_database_with_defaults() - _verify_required_model_types() diff --git a/app/models/api_schemas/__init__.py b/app/models/api_schemas/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/models/api_schemas/controller.py b/app/models/api_schemas/controller.py deleted file mode 100644 index 5edbfe9a..00000000 --- a/app/models/api_schemas/controller.py +++ /dev/null @@ -1,23 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel -## Local -from models.config.controller import ControllerSettingsSchema -from models.data.model_providers import LLMModelProvider - - -# REQUESTS -EditSettingsRequest: type[BaseModel] = ControllerSettingsSchema - - -# RESPONSES -class GetVersionDetailsResponse(BaseModel): - version: str - authors: list[str] - license: str - last_update: str - rebuild_date: str - -GetSettingsResponse: type[BaseModel] = ControllerSettingsSchema - -GetLLMModelsResponse: type[BaseModel] = LLMModelProvider diff --git a/app/models/api_schemas/defaults.py b/app/models/api_schemas/defaults.py deleted file mode 100644 index 20c01ab0..00000000 --- a/app/models/api_schemas/defaults.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -# REQUESTS - - -# RESPONSES -class DefaultAPIResponse(BaseModel): - message: str diff --git a/app/models/config/__init__.py b/app/models/config/__init__.py deleted file mode 100644 index 2d8045fd..00000000 --- a/app/models/config/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .model_providers import ModelProviderSettings \ No newline at end of file diff --git a/app/models/config/controller.py b/app/models/config/controller.py deleted file mode 100644 index d6fe407d..00000000 --- a/app/models/config/controller.py +++ /dev/null @@ -1,16 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel -## Local -from constants import Defaults -from .defaults import DEFAULT_LAYER_SETTINGS, DEFAULT_MODEL_PROVIDER_SETTINGS, DEFAULT_UI_SETTINGS -from .layers import LayerSettings -from .model_providers import ModelProviderSettings -from .ui import UISettings - - -class ControllerSettingsSchema(BaseModel): - ace_name: str = Defaults.ACE_NAME - ui_settings: UISettings = DEFAULT_UI_SETTINGS - model_provider_settings: ModelProviderSettings = DEFAULT_MODEL_PROVIDER_SETTINGS - layer_settings: list[LayerSettings] = DEFAULT_LAYER_SETTINGS diff --git a/app/models/config/defaults.py b/app/models/config/defaults.py deleted file mode 100644 index 2d2448d5..00000000 --- a/app/models/config/defaults.py +++ /dev/null @@ -1,102 +0,0 @@ -# DEPENDENCIES -## Local -from constants import ( - Defaults, - LayerTypes, - LLMModelTypes -) -from .layers import LayerSettings -from .model_providers import ModelProviderSettings, model_types -from .ui import UISettings - - -# UI -DEFAULT_UI_SETTINGS: UISettings = UISettings( - dark_mode=True, - show_footer=False -) - - -# MODEL PROVIDERS -## Model Types -DEFAULT_LLM_MODEL_TYPE_SETTINGS: list[model_types.LLMModelTypeSetting] = [ - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.CODER, - model_id="0194c745-de29-7bc6-ad6b-f7b5f8d0e414", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.EFFICIENT, - model_id="0194c74b-ff7d-7c91-a7b2-934a16aafb04", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.FUNCTION_CALLER, - model_id="0194c751-721a-7470-a277-e76ccdb840b8", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.GENERALIST, - model_id="0194c751-721a-7470-a277-e76ccdb840b8", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.REASONER, - model_id="0194c74e-13ea-72d5-9b2d-a46dfa196784", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ) -] - -DEFAULT_RAG_MODEL_TYPE_SETTINGS: list[model_types.RAGModelTypeSetting] = [] -# model_types.LLMModelTypeSetting( -# model_type=RAGModelTypes.EMBEDDER, -# model_name="granite-embedding:30m", -# creative_temperature=Defaults.CREATIVE_TEMPERATURE, -# logical_temperature=Defaults.LOGICAL_TEMPERATURE, -# output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT -# ), - -## Overall -DEFAULT_MODEL_PROVIDER_SETTINGS = ModelProviderSettings( - llm_model_type_settings=DEFAULT_LLM_MODEL_TYPE_SETTINGS, - rag_model_type_settings=DEFAULT_RAG_MODEL_TYPE_SETTINGS -) - - -# LAYERS -DEFAULT_LAYER_SETTINGS: list[LayerSettings] = [ - LayerSettings( - layer_name=LayerTypes.ASPIRATIONAL, - model_type=LLMModelTypes.REASONER - ), - LayerSettings( - layer_name=LayerTypes.GLOBAL_STRATEGY, - model_type=LLMModelTypes.REASONER - ), - LayerSettings( - layer_name=LayerTypes.AGENT_MODEL, - model_type=LLMModelTypes.GENERALIST - ), - LayerSettings( - layer_name=LayerTypes.EXECUTIVE_FUNCTION, - model_type=LLMModelTypes.GENERALIST - ), - LayerSettings( - layer_name=LayerTypes.COGNITIVE_CONTROL, - model_type=LLMModelTypes.EFFICIENT - ), - LayerSettings( - layer_name=LayerTypes.TASK_PROSECUTION, - model_type=LLMModelTypes.FUNCTION_CALLER - ) -] diff --git a/app/models/config/layers.py b/app/models/config/layers.py deleted file mode 100644 index 2eb0a33e..00000000 --- a/app/models/config/layers.py +++ /dev/null @@ -1,12 +0,0 @@ -# DEPENDENCIES -## Built-In -from typing import Literal -## Third-Party -from pydantic import BaseModel -## Local -from constants import LayerTypes, LLMModelTypes - - -class LayerSettings(BaseModel): - layer_name: Literal[*LayerTypes.get_frozenset()] - model_type: Literal[*LLMModelTypes.get_frozenset()] diff --git a/app/models/config/model_providers/__init__.py b/app/models/config/model_providers/__init__.py deleted file mode 100644 index a2791c70..00000000 --- a/app/models/config/model_providers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .model_providers import ModelProviderSettings -from .individual_providers import IndividualProviderSettings \ No newline at end of file diff --git a/app/models/config/model_providers/individual_providers.py b/app/models/config/model_providers/individual_providers.py deleted file mode 100644 index 0b9163ab..00000000 --- a/app/models/config/model_providers/individual_providers.py +++ /dev/null @@ -1,9 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class IndividualProviderSettings(BaseModel): - name: str - enabled: bool = False - api_key: str = "" diff --git a/app/models/config/model_providers/model_providers.py b/app/models/config/model_providers/model_providers.py deleted file mode 100644 index e79f9b53..00000000 --- a/app/models/config/model_providers/model_providers.py +++ /dev/null @@ -1,56 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel -## Local -from constants import ModelProviders -from .individual_providers import IndividualProviderSettings -from . import model_types - - -class ModelProviderSettings(BaseModel): - individual_provider_settings: list[IndividualProviderSettings] = [ - IndividualProviderSettings( - name=ModelProviders.ANTHROPIC, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.DEEPSEEK, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.GOOGLE_VERTEX_AI, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.GROK, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.GROQ, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.OLLAMA, - enabled=True, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.OPENAI, - enabled=False, - api_key="" - ) - ] - - three_d_model_type_settings: list[model_types.ThreeDModelTypeSetting] = [] - audio_model_type_settings: list[model_types.AudioModelTypeSetting] = [] - image_model_type_settings: list[model_types.ImageModelTypeSetting] = [] - llm_model_type_settings: list[model_types.LLMModelTypeSetting] - multimodal_model_type_settings: list[model_types.MultiModalModelTypeSetting] = [] - rag_model_type_settings: list[model_types.RAGModelTypeSetting] - robotics_model_type_settings: list[model_types.RoboticsModelTypeSetting] = [] - video_model_type_settings: list[model_types.VideoModelTypeSetting] = [] diff --git a/app/models/config/model_providers/model_types/__init__.py b/app/models/config/model_providers/model_types/__init__.py deleted file mode 100644 index 99931d4b..00000000 --- a/app/models/config/model_providers/model_types/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from .three_d import ThreeDModelTypeSetting -from .audio import AudioModelTypeSetting -from .image import ImageModelTypeSetting -from .llm import LLMModelTypeSetting -from .multimodal import MultiModalModelTypeSetting -from .rag import RAGModelTypeSetting -from .robotics import RoboticsModelTypeSetting -from .video import VideoModelTypeSetting \ No newline at end of file diff --git a/app/models/config/model_providers/model_types/audio.py b/app/models/config/model_providers/model_types/audio.py deleted file mode 100644 index b92802ab..00000000 --- a/app/models/config/model_providers/model_types/audio.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class AudioModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/image.py b/app/models/config/model_providers/model_types/image.py deleted file mode 100644 index 39a18958..00000000 --- a/app/models/config/model_providers/model_types/image.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class ImageModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/llm.py b/app/models/config/model_providers/model_types/llm.py deleted file mode 100644 index 79b3731b..00000000 --- a/app/models/config/model_providers/model_types/llm.py +++ /dev/null @@ -1,23 +0,0 @@ -# DEPENDENCIES -## Built-In -from typing import Literal -## Third-Party -from pydantic import BaseModel, field_validator -## Local -from constants import LLMModelTypes - - -class LLMModelTypeSetting(BaseModel): - model_type: Literal[*LLMModelTypes.get_frozenset()] - model_id: str - logical_temperature: float - creative_temperature: float - output_token_limit: int - - @field_validator("logical_temperature") - def validate_logical_temperature(cls, value): - return min(max(0.0, value), 2.0) - - @field_validator("creative_temperature") - def validate_creative_temperature(cls, value): - return min(max(0.0, value), 2.0) diff --git a/app/models/config/model_providers/model_types/multimodal.py b/app/models/config/model_providers/model_types/multimodal.py deleted file mode 100644 index ad243c83..00000000 --- a/app/models/config/model_providers/model_types/multimodal.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class MultiModalModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/rag.py b/app/models/config/model_providers/model_types/rag.py deleted file mode 100644 index ffa26f8b..00000000 --- a/app/models/config/model_providers/model_types/rag.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class RAGModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/robotics.py b/app/models/config/model_providers/model_types/robotics.py deleted file mode 100644 index 018dfbc5..00000000 --- a/app/models/config/model_providers/model_types/robotics.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class RoboticsModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/three_d.py b/app/models/config/model_providers/model_types/three_d.py deleted file mode 100644 index dfd16271..00000000 --- a/app/models/config/model_providers/model_types/three_d.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class ThreeDModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/video.py b/app/models/config/model_providers/model_types/video.py deleted file mode 100644 index 059cea6d..00000000 --- a/app/models/config/model_providers/model_types/video.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class VideoModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/ui.py b/app/models/config/ui.py deleted file mode 100644 index 50f19b00..00000000 --- a/app/models/config/ui.py +++ /dev/null @@ -1,8 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class UISettings(BaseModel): - dark_mode: bool - show_footer: bool diff --git a/app/models/data/__init__.py b/app/models/data/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/models/data/initial.py b/app/models/data/initial.py deleted file mode 100644 index 7b552bc1..00000000 --- a/app/models/data/initial.py +++ /dev/null @@ -1,200 +0,0 @@ -# DEPENDENCIES -## Built-In -from datetime import datetime -## Local -from constants import ModelProviders -from .model_providers import LLMModelProvider - - -# MODEL PROVIDERS -INTITAL_LLM_MODEL_PROVIDERS: list[LLMModelProvider] = [ - # Claude - LLMModelProvider( - id="0194c740-6300-7184-8eff-2be664245b03", - model_provider=ModelProviders.ANTHROPIC, - name="Claude 3.5 Haiku", - model_name="claude-3-5-haiku-latest", - default=True, - max_input_tokens=200000, - max_output_tokens=8192, - cost_per_million_input_tokens=0.8, - cost_per_million_output_tokens=4, - knowledge_cutoff=datetime(2024,7,1), - rate_limits="50 RPM | 50,000 ITPM | 10,000 OTPM" - ), - LLMModelProvider( - id="0194c740-98bb-76db-95ed-ef6cfa62839b", - model_provider=ModelProviders.ANTHROPIC, - name="Claude 3.5 Sonnet", - model_name="claude-3-5-sonnet-latest", - default=True, - max_input_tokens=200000, - max_output_tokens=8192, - cost_per_million_input_tokens=3, - cost_per_million_output_tokens=15, - knowledge_cutoff=datetime(2024,4,1), - rate_limits="50 RPM | 40,000 ITPM | 8,000 OTPM" - ), - # DeepSeek - LLMModelProvider( - id="0194c740-cb0b-797e-9106-008f0d6b989a", - model_provider=ModelProviders.DEEPSEEK, - name="DeepSeek Chat", - model_name="deepseek-chat", - default=True, - max_input_tokens=64000, - max_output_tokens=8192, - cost_per_million_input_tokens=0.14, - cost_per_million_output_tokens=0.28, - rate_limits="None", - knowledge_cutoff=datetime(2023,10,1) - ), - LLMModelProvider( - id="0194c740-ecc7-78e2-bd5d-e3e5b967bff6", - model_provider=ModelProviders.DEEPSEEK, - name="DeepSeek Reasoner", - model_name="deepseek-reasoner", - default=True, - max_input_tokens=64000, - max_output_tokens=8192, - cost_per_million_input_tokens=0.55, - cost_per_million_output_tokens=2.19, - rate_limits="None", - knowledge_cutoff=datetime(2023,7,1) - ), - # Google Vertex AI - LLMModelProvider( - id="0194c741-1889-7ed9-8149-9c9e52f4be18", - model_provider=ModelProviders.GOOGLE_VERTEX_AI, - name="Gemini 2.0 Flash Exp", - model_name="gemini-2.0-flash-exp", - default=True, - max_input_tokens=1048576, - max_output_tokens=8192, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="10 RPM | 4 million TPM | 1,500 RPD", - knowledge_cutoff=datetime(2024,8,1) - ), - LLMModelProvider( - id="0194c741-40f7-7bcf-968b-ca216c6c0943", - model_provider=ModelProviders.GOOGLE_VERTEX_AI, - name="Gemini 1.5 Flash", - model_name="gemini-1.5-flash", - default=True, - max_input_tokens=1048576, - max_output_tokens=8192, - cost_per_million_input_tokens=0.028125, - cost_per_million_output_tokens=0.11, - rate_limits="Free: 15 RPM | 1 million TPM | 1,500 RPD || Pay-as-you-go: 2,000 RPM | 4 million TPM", - knowledge_cutoff=datetime(2023,11,1) - ), - # Grok - LLMModelProvider( - id="0194c741-6a34-76e5-9442-15acf8623224", - model_provider=ModelProviders.GROK, - name="grok-2", - model_name="grok-2-latest", - default=True, - max_input_tokens=131072, - max_output_tokens=131072, - cost_per_million_input_tokens=2, - cost_per_million_output_tokens=10, - rate_limits="None", - knowledge_cutoff=None - ), - # Groq - LLMModelProvider( - id="0194c741-9423-7561-a795-eff3d8e26856", - model_provider=ModelProviders.GROQ, - name="LLama3 70B", - model_name="llama3-70b-8192", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0.59, - cost_per_million_output_tokens=0.79, - rate_limits="30 RPM | 14,000 RPD | 6,000 TPM | 500,000 TPD", - knowledge_cutoff=datetime(2023,12,1) - ), - LLMModelProvider( - id="0194c741-b4dc-7aba-aaf0-8bd569ff1910", - model_provider=ModelProviders.GROQ, - name="LLama3 8B", - model_name="llama3-8b-8192", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0.05, - cost_per_million_output_tokens=0.08, - rate_limits="30 RPM | 14,000 RPD | 6,000 TPM | 500,000 TPD", - knowledge_cutoff=datetime(2023,3,1) - ), - LLMModelProvider( - id="0194c741-e5b0-770b-9632-5a5029281c72", - model_provider=ModelProviders.GROQ, - name="Mixtral 8x7B", - model_name="mixtral-8x7b-32768", - default=True, - max_input_tokens=32768, - max_output_tokens=32768, - cost_per_million_input_tokens=0.24, - cost_per_million_output_tokens=0.24, - rate_limits="30 RPM | 14,000 RPD | 5,000 TPM | 500,000 TPD", - knowledge_cutoff=datetime(2023,12,1) - ), - # OLLAMA - LLMModelProvider( - id="0194c745-de29-7bc6-ad6b-f7b5f8d0e414", - model_provider=ModelProviders.OLLAMA, - name="Qwen 2.5 Coder 3B", - model_name="qwen2.5-coder:3b", - default=True, - max_input_tokens=32768, - max_output_tokens=32768, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2024,9,1) - ), - LLMModelProvider( - id="0194c74b-ff7d-7c91-a7b2-934a16aafb04", - model_provider=ModelProviders.OLLAMA, - name="Dolphin 3.0 LLaMA3 1B", - model_name="nchapman/dolphin3.0-llama3:1b", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2023,12,1) - ), - LLMModelProvider( - id="0194c751-721a-7470-a277-e76ccdb840b8", - model_provider=ModelProviders.OLLAMA, - name="Dolphin 3.0 LLaMA3 3B", - model_name="nchapman/dolphin3.0-llama3:3b", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2023,12,1) - ), - LLMModelProvider( - id="0194c74e-13ea-72d5-9b2d-a46dfa196784", - model_provider=ModelProviders.OLLAMA, - name="Deepseek R1 1.5B", - model_name="deepseek-r1:1.5b", - default=True, - max_input_tokens=32768, - max_output_tokens=32768, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2023,7,1) - ), - # OpenAI -] \ No newline at end of file diff --git a/app/models/data/model_providers.py b/app/models/data/model_providers.py deleted file mode 100644 index 288eeae7..00000000 --- a/app/models/data/model_providers.py +++ /dev/null @@ -1,23 +0,0 @@ -# DEPENDENCIES -## Built-In -from datetime import datetime -from typing import Literal -## Third-Party -from pydantic import BaseModel -## Local -from constants import ModelProviders - - -# BASE -class LLMModelProvider(BaseModel): - id: str - model_provider: Literal[*ModelProviders.get_frozenset()] - name: str - model_name: str - default: bool = False - max_input_tokens: int - max_output_tokens: int - cost_per_million_input_tokens: float = 0 - cost_per_million_output_tokens: float = 0 - knowledge_cutoff: datetime | None - rate_limits: str = "Not Available" diff --git a/app/models/data/required.py b/app/models/data/required.py deleted file mode 100644 index 83e515f9..00000000 --- a/app/models/data/required.py +++ /dev/null @@ -1,22 +0,0 @@ -# DEPENDENCIES -## Local -from constants import LLMModelTypes, RAGModelTypes - - -# MODEL PROVIDERS -REQUIRED_3D_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_AUDIO_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_IMAGE_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_LLM_MODEL_TYPES: frozenset[str] = frozenset([ - LLMModelTypes.CODER, - LLMModelTypes.EFFICIENT, - LLMModelTypes.FUNCTION_CALLER, - LLMModelTypes.GENERALIST, - LLMModelTypes.REASONER -]) -REQUIRED_MULTIMODAL_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_RAG_MODEL_TYPES: frozenset[str] = frozenset([ - RAGModelTypes.EMBEDDER -]) -REQUIRED_ROBOTICS_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_VIDEO_MODEL_TYPES: frozenset[str] = frozenset() diff --git a/app/requirements b/app/requirements deleted file mode 100644 index 22cb80b9..00000000 --- a/app/requirements +++ /dev/null @@ -1,3 +0,0 @@ -fastapi==0.115.8 -pydantic==2.10.6 -uvicorn==0.34.0 \ No newline at end of file diff --git a/app/shell.py b/app/shell.py deleted file mode 100644 index e2f42fee..00000000 --- a/app/shell.py +++ /dev/null @@ -1,67 +0,0 @@ -# DEPENDENCIES -## Built-in -import os -import subprocess -from subprocess import Popen -## Local -from logger import logger - - -def execute_shell( - command: str, - should_print_result: bool = True, - ignore_error: bool = False, - error_message: str = "", - _testing: bool = False -) -> str: - """Execute a shell command and return the output""" - if not error_message: - error_message = f"Unable to execute command: {command}" - logger.debug(f'Running Command: "{command}"') - - process: Popen = subprocess.Popen( - command, - shell=True, # Use shell=True to handle complex commands - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True - ) - - stdout_lines: list[str] = [] - while True: - error_output: str = process.stderr.readline() if process.stderr else "" - if error_output: - stdout_lines.append(error_output) - if should_print_result: - print(error_output, end="") - output: str = process.stdout.readline() if process.stdout else "" - if output == "" and process.poll() is not None: - break - if output: - stdout_lines.append(output) - if should_print_result: - print(output, end="") - - remaining_stdout, stderr = process.communicate() - if remaining_stdout: - stdout_lines.append(remaining_stdout) - if should_print_result: - print(remaining_stdout, end="") - - if process.returncode != 0 and not ignore_error: - logger.error(f"{error_message}: {stderr}") - if _testing: - raise SystemExit(f"{error_message}: {stderr}") - os._exit(1) - - return "".join(stdout_lines) - -def shell_check_exists(shell_command: str, keyword_to_find: str) -> bool: - """Checks if the keyword exists in the output of the check_command""" - logger.debug(f'Checking using "{shell_command}" for {keyword_to_find}...') - existing_terms = frozenset(execute_shell(shell_command).split("\n")) - logger.debug(f"Existing Terms: {existing_terms}") - for entry in existing_terms: - if keyword_to_find in entry: - return True - return False diff --git a/app/startup.py b/app/startup.py deleted file mode 100755 index 806acd1d..00000000 --- a/app/startup.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python3.13 - -# DEPENDENCIES -## Built-in -import argparse -import json -## Local -from constants import DictKeys, Files, Names, ShellCommands -from constants.files import setup_user_deployment_file -from logger import logger -from shell import execute_shell, shell_check_exists - - -# ARGUMENTS -def _get_arguments() -> dict[str, bool]: - parser = argparse.ArgumentParser() - parser.add_argument("-d", "--dev", action="store_true", help="Enable dev mode") - parser.add_argument("-b", "--build", action="store_true", help="Build the container images") - parser.add_argument("-r", "--restart", action="store_true", help="Restart the ACE cluster") - parser.add_argument("-s", "--stop", action="store_true", help="Stop the ACE cluster") - return vars(parser.parse_args()) - - -# PREPARATION -def _setup_network() -> None: - if not shell_check_exists(check_command=ShellCommands.CHECK_NETWORK, keyword=Names.NETWORK): - logger.startup("First time setting up network...") - execute_shell(ShellCommands.CREATE_NETWORK) - -def _update() -> bool: - """Update the git repo, returning True if container needs to be rebuilt""" - logger.startup(f"Updating {Names.ACE}...") - execute_shell(ShellCommands.UPDATE) - -def _check_if_latest_build() -> bool: - """Compares the update history and version files to check if the container needs to be rebuilt""" - updates: dict[str] = {} - history: dict[str] = {} - with open(Files.VERSION, "r", encoding="utf-8") as updates_file: - updates = json.load(updates_file) - with open(Files.STARTUP_HISTORY, "r", encoding="utf-8") as history_file: - history = json.loads(history_file.read()) - if not history: - with open(Files.STARTUP_HISTORY, "w", encoding="utf-8") as history_file: - history[DictKeys.REBUILD_DATE] = "" - json.dump(history, history_file) - return True - - if history.get(DictKeys.REBUILD_DATE, "") != updates[DictKeys.REBUILD_DATE]: - return True - return False - -def _build_container_image(force_build: bool = False): - """ - A function which builds if image doesn't exist or if force_build flag is set - """ - logger.startup("Checking if build is required...") - image_exists: bool = shell_check_exists(check_command=ShellCommands.CHECK_IMAGES, keyword=Names.IMAGE) - should_build: bool = not image_exists or force_build - if not should_build: - logger.startup("Image already exists, skipping build...") - return - if not image_exists: - logger.startup("Image does not exist, building container...") - else: - logger.startup("Building container...") - execute_shell(ShellCommands.BUILD_IMAGE, error_message="Unable to build image") - - updates: dict[str] = {} - history: dict[str] = {} - with open(Files.VERSION, "r", encoding="utf-8") as updates_file: - updates = json.load(updates_file) - with open(Files.STARTUP_HISTORY, "r", encoding="utf-8") as history_file: - history = json.load(history_file) - - history[DictKeys.REBUILD_DATE] = updates[DictKeys.REBUILD_DATE] - with open(Files.STARTUP_HISTORY, "w", encoding="utf-8") as history_file: - json.dump(history, history_file) - - -# DEPLOYMENT -def _stop_cluster() -> None: - """ - Stops the ACE cluster if it is running - """ - exists: bool = shell_check_exists(ShellCommands.CHECK_PODS, Names.ACE) - if not exists: - logger.warn(f"{Names.ACE} is not running! Cannot stop...") - return - logger.startup(f"Stopping {Names.ACE}...") - execute_shell(ShellCommands.STOP_CLUSTER) - -def _start_cluster(force_restart: bool) -> None: - """ - Start the ACE cluster if it isn't running, handling restarts - """ - exists: bool = shell_check_exists(ShellCommands.CHECK_PODS, Names.ACE) - if not force_restart and exists: - logger.startup(f"ACE is already running... Run with --{DictKeys.RESTART} to restart!") - return - if force_restart: - logger.startup(f"Restarting {Names.ACE}...") - else: - logger.startup(f"Starting {Names.ACE}...") - execute_shell(ShellCommands.DEPLOY_CLUSTER) - - -# MAIN -def _startup(): - arguments: dict[str, bool] = _get_arguments() - dev: bool = arguments[DictKeys.DEV] - force_build: bool = arguments[DictKeys.BUILD] - - setup_user_deployment_file(dev) - _setup_network() - if not dev: - _update() - update_build: bool = _check_if_latest_build() - if update_build: - force_build = True - _build_container_image(force_build=force_build) - execute_shell(ShellCommands.CLEAR_OLD_IMAGES) - - if arguments[DictKeys.STOP]: - _stop_cluster() - return - - _start_cluster(force_restart=arguments[DictKeys.RESTART]) - - -if __name__ == "__main__": - _startup() diff --git a/app/version b/app/version deleted file mode 100644 index ecf10e70..00000000 --- a/app/version +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": "0.0.0", - "authors": [ - "Jayfalls" - ], - "license": "MIT", - "last_update": "2025-03-23 15:44:44", - "rebuild_date": "2025-02-02" -} diff --git a/design/source.md b/design/source.md new file mode 100644 index 00000000..aa954ef9 --- /dev/null +++ b/design/source.md @@ -0,0 +1,231 @@ +# ACE (Autonomous Cognitive Entity) Framework + +> A comprehensive summary of the ACE Framework based on the original paper (arXiv:2310.06775) and associated research. + +## Overview + +The Autonomous Cognitive Entity (ACE) framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro, Wangfan Li, Manuel Delaflor, and Carlos Toxtli at the Human-AI Empowerment Lab at Clemson University, as presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). + +The framework draws inspiration from the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures. It is designed to harness the capabilities of the latest generative AI technologies, including large language models (LLMs) and multimodal generative models (MMMs), to build autonomous, agentic systems that are capable, secure, and aligned with human values. + +--- + +## The Six-Layer Cognitive Architecture + +The core innovation of the ACE model is its hierarchical structure consisting of six layers, each handling specialized cognitive functions. The layers progress from abstract ethical reasoning at the top to concrete task execution at the bottom. + +### Layer 1: Aspirational Layer (L1) + +The Aspirational Layer serves as the moral compass and ethical foundation of the ACE framework. It sets the moral direction and core values that guide the entire system. + +**Key Functions:** +- Establishes fundamental values and ethical principles +- Defines the entity's "prime directive" or core mission +- Provides moral reasoning capabilities +- Incorporates both deontological (duty-based) and teleological (outcome-based) ethical approaches +- Rejects an "either/or" stance in favor of a "both/and" perspective on ethics +- Monitors system activity through read access to all layers + +**Philosophical Foundations:** +- Lawrence Kohlberg's theory of moral development (progressing from obedience to universal ethical principles) +- Abraham Maslow's hierarchy of needs (from basic needs to self-actualization) +- Patricia Churchland's concept of expanding "spheres of caring" +- Sigmund Freud's concepts of the superego (capturing virtuous agent's essence) + +### Layer 2: Global Strategy (L2) + +The Global Strategy layer focuses on high-level planning and strategic thinking. It shapes the overall direction of the system based on the aspirational values. + +**Key Functions:** +- High-level planning and goal prioritization +- Strategic thinking and long-term objective setting +- Translates aspirational values into actionable strategies +- Coordinates with the Aspirational Layer to ensure alignment +- Handles resource allocation across competing objectives + +### Layer 3: Agent Model (L3) + +The Agent Model layer handles self-modeling and self-understanding. It represents the entity's understanding of itself. + +**Key Functions:** +- Maintains self-awareness and self-representation +- Models the entity's own capabilities and limitations +- Tracks internal state and emotional/affective states +- Informed by Freud's concept of the ego +- Enables introspection and self-assessment + +### Layer 4: Executive Function (L4) + +The Executive Function layer handles dynamic task management and orchestration of cognitive resources. + +**Key Functions:** +- Dynamic task management and switching +- Cognitive resource orchestration +- Memory management (both working and long-term) +- Planning and plan revision +- Handling task interruptions and prioritization + +### Layer 5: Cognitive Control (L5) + +The Cognitive Control layer manages decision-making and impulse control. + +**Key Functions:** +- Decision-making under uncertainty +- Inhibitory control and impulse management +- Attention allocation and focus +- Error detection and correction +- Conflict resolution between competing actions +- Bias management and mitigation + +### Layer 6: Task Prosecution (L6) + +The Task Prosecution layer handles execution and embodiment—the interaction with the external environment. + +**Key Functions:** +- Direct interaction with the environment +- Motor control and action execution +- Sensory processing and perception +- Real-time adaptation to environmental changes +- Handling failures and recovery + +--- + +## Bidirectional Communication Buses + +A key architectural feature of the ACE framework is the use of bidirectional communication buses that enable information flow between layers. + +### Southbound Bus (Top-Down) + +The Southbound bus carries directives and commands from higher layers down to lower layers. + +**Function:** +- Translates abstract ethical principles into concrete actions +- Propagates strategic decisions to tactical and operational levels +- Ensures that high-level values influence day-to-day decisions +- Enables top-down oversight by ethical reasoning modules + +### Northbound Bus (Bottom-Up) + +The Northbound bus carries feedback, sensory data, and learning signals from lower layers up to higher layers. + +**Function:** +- Reports execution results and environmental observations +- Conveys learning and adaptation signals +- Enables bottom-up learning from ground-up execution levels +- Guides revision of strategic plans and ethical frameworks based on experience + +### System Integrity Overlay + +The ACE framework includes a System Integrity overlay that provides: +- Read access for the Aspirational Layer to monitor all layers +- Privilege separation for security and corrigibility +- Transparency in communication between layers +- Ability to intervene and correct deviations from ethical principles + +--- + +## Key Design Principles + +### 1. Layered Encapsulation + +Inspired by the OSI model, the ACE framework uses layered abstraction to enhance: +- **Security**: Clear boundaries between cognitive functions +- **Corrigibility**: Ability to correct deviations from intended behavior +- **Coordination**: Well-defined interfaces between layers +- **Interpretability**: Transparent communication between layers + +### 2. Ethical Foundation + +The framework integrates ethics at the architectural level, not as an afterthought: +- Moral reasoning embedded in upper layers +- Both deontological and teleological approaches +- Focus on human values and alignment + +### 3. Bidirectional Information Flow + +The architecture enables: +- Top-down oversight by ethical modules +- Bottom-up learning from execution experience +- Adaptive strategy revision based on feedback + +### 4. Neuroscience-Inspired Design + +The framework incorporates principles from: +- Jeff Hawkins' "thousand brains" theory (modular, parallel processing) +- Robert Sapolsky's work on behavioral self-regulation +- David Badre's research on executive functions +- Antonio Damasio's somatic marker hypothesis + +### 5. Natural Language as Substrate + +The ACE framework leverages LLMs as key components because: +- Natural language enables flexible understanding of context +- Provides interpretability and common sense reasoning +- Allows integration of world knowledge +- Enables self-explanation capabilities + +--- + +## Implementation Considerations + +### Integration with LLMs + +The ACE framework is designed to work with modern large language models: +- LLMs can serve as reasoning engines for multiple layers +- Natural language enables layer-to-layer communication +- Constitutional AI and self-alignment techniques can inform implementation + +### Handling Failures + +The framework includes mechanisms for: +- Failure detection at each layer +- Graceful degradation +- Adaptive action revision +- Robust error handling + +### Safety and Alignment + +The architecture supports: +- Privilege separation for security +- Read-only monitoring by ethical layers +- Intervention capabilities for correction +- Transparent decision-making processes + +--- + +## Comparison to Related Models + +### OSI Model Analogy + +Like the OSI model for networking, the ACE framework provides: +- Clear separation of concerns +- Standardized interfaces between layers +- Modular implementation possibilities +- Encapsulation of complexity + +### Distinction from Traditional Agents + +Unlike conventional AI architectures that focus narrowly on technical skills, ACE: +- Integrates ethical reasoning from the ground up +- Emphasizes internal cognition over direct environmental interaction +- Provides hierarchical abstraction for cognitive functions + +--- + +## Conclusion + +The ACE framework provides a systematic approach to building autonomous agents that are: +- **Capable**: Leveraging LLMs and modern AI technologies +- **Secure**: Through layered encapsulation and privilege separation +- **Aligned**: By integrating ethical reasoning at the architectural level +- **Adaptable**: Through bidirectional learning and feedback loops +- **Interpretable**: Through transparent layer-to-layer communication + +This conceptual framework establishes a foundation for developing artificial general intelligence that learns, adapts, and thrives while remaining steadfastly aligned to the aspirations of humanity. + +--- + +## References + +- Shapiro, D., Li, W., Delaflor, M., & Toxtli, C. (2023). Conceptual Framework for Autonomous Cognitive Entities. arXiv:2310.06775 +- GitHub: https://github.com/daveshap/ACE_Framework (archived, read-only) diff --git a/documentation/personal.md b/documentation/personal.md deleted file mode 100644 index c4d93198..00000000 --- a/documentation/personal.md +++ /dev/null @@ -1,17 +0,0 @@ -[⬆️](..) - -## Component Commands -- UI -```shell -npm10 run start-local -``` -- Controller -```shell -source ../.venv/bin/activate -ACE_LOGGER_FILE_NAME="controller" ACE_LOGGER_VERBOSE="" ./component.py --controller --dev -``` - -## Podman Weirdness -```shell -podman machine stop && podman machine start -``` \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/requirements b/tests/requirements deleted file mode 100644 index 5d7f208c..00000000 --- a/tests/requirements +++ /dev/null @@ -1,3 +0,0 @@ -pytest==8.3.4 -pytest-mock==3.14.0 -pyyaml==6.0.2 \ No newline at end of file diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py deleted file mode 100644 index 572e9edc..00000000 --- a/tests/unit/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -## Local -from app.constants import EnvironmentVariables -from tests.unit.testing_constants import TestingConfigs - - -# LOGGER FIX -os.environ[EnvironmentVariables.LOG_FILE_NAME] = TestingConfigs.LOG_FILE_NAME -os.environ[EnvironmentVariables.LOGGER_VERBOSE] = TestingConfigs.VERBOSE_ENABLED diff --git a/tests/unit/components/__init__.py b/tests/unit/components/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/components/controller/__init__.py b/tests/unit/components/controller/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/components/controller/api/__init__.py b/tests/unit/components/controller/api/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/components/controller/api/test_service.py b/tests/unit/components/controller/api/test_service.py deleted file mode 100644 index c83afa9c..00000000 --- a/tests/unit/components/controller/api/test_service.py +++ /dev/null @@ -1,102 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -import json -## Third-Party -import pytest -## Local -from app.models.config.controller import ControllerSettingsSchema -from app.models.config.layers import LayerSettings -from app.models.config.model_providers import IndividualProviderSettings, ModelProviderSettings -from app.components.controller.api.services.root import ( - _get_settings, - edit_settings_data -) -from app.constants import Files, DictKeys, LayerTypes, LLMModelTypes - - -# CONSTANTS -class ExistingSettings: - ACE_NAME: str = "existing_name" - LAYER_SETTINGS: list[dict] = [ - LayerSettings( - layer_name=LayerTypes.ASPIRATIONAL, - model_type=LLMModelTypes.EFFICIENT - ).model_dump() - ] - MODEL_PROVIDER_SETTINGS = ModelProviderSettings( - llm_model_type_settings = [], - rag_model_type_settings = [] - ).model_dump() - - -# HELPERS -def _empty_settings_file(): - """Sets the settings file to an empty dictionary""" - with open(Files.CONTROLLER_SETTINGS, 'w') as f: - json.dump({}, f) - -def _default_settings_file(): - """Sets the settings file to an default values""" - _empty_settings_file() - _get_settings() - -def _existing_settings_file(): - """Sets the settings file to an existing dictionary""" - with open(Files.CONTROLLER_SETTINGS, 'w') as f: - json.dump( - ControllerSettingsSchema( - ace_name=ExistingSettings.ACE_NAME, - layer_settings=ExistingSettings.LAYER_SETTINGS, - model_provider_settings=ExistingSettings.MODEL_PROVIDER_SETTINGS - ).model_dump(), - f - ) - -def _assert_settings_populated(): - assert os.path.isfile(Files.CONTROLLER_SETTINGS), "Settings file should exist" - with open(Files.CONTROLLER_SETTINGS, 'r') as f: - settings = json.load(f) - assert DictKeys.ACE_NAME in settings, f"Settings file should contain {DictKeys.ACE_NAME}" - assert DictKeys.LAYER_SETTINGS in settings, f"Settings file should contain {DictKeys.LAYER_SETTINGS}" - assert DictKeys.MODEL_PROVIDER_SETTINGS in settings, f"Settings file should contain {DictKeys.MODEL_PROVIDER_SETTINGS}" - - -# TESTS -def test_get_settings_populates_empty_file(): - """Test that _get_settings populates the settings file""" - _empty_settings_file() - settings: dict = _get_settings() - assert isinstance(settings, dict), "Settings should be a dictionary" - assert DictKeys.ACE_NAME in settings, f"Settings should contain {DictKeys.ACE_NAME}" - assert DictKeys.LAYER_SETTINGS in settings, f"Settings should contain {DictKeys.LAYER_SETTINGS}" - assert DictKeys.MODEL_PROVIDER_SETTINGS in settings, f"Settings should contain {DictKeys.MODEL_PROVIDER_SETTINGS}" - _assert_settings_populated() - -def test_get_settings_does_not_overwrite_existing_values(): - """Test that _get_settings does not overwrite existing settings""" - _existing_settings_file() - _get_settings() - - with open(Files.CONTROLLER_SETTINGS, 'r') as f: - settings: dict = json.load(f) - assert settings[DictKeys.ACE_NAME] == ExistingSettings.ACE_NAME, f"{DictKeys.ACE_NAME} should not be overwritten" - assert settings[DictKeys.LAYER_SETTINGS] == ExistingSettings.LAYER_SETTINGS, f"{DictKeys.LAYER_SETTINGS} should not be overwritten" - assert settings[DictKeys.MODEL_PROVIDER_SETTINGS] == ExistingSettings.MODEL_PROVIDER_SETTINGS, f"{DictKeys.MODEL_PROVIDER_SETTINGS} should not be overwritten" - -def test_edit_settings_data(): - """Test that edit_settings_data updates the settings correctly.""" - updated_settings = { - DictKeys.ACE_NAME: ExistingSettings.ACE_NAME, - DictKeys.LAYER_SETTINGS: ExistingSettings.LAYER_SETTINGS, - DictKeys.MODEL_PROVIDER_SETTINGS: ExistingSettings.MODEL_PROVIDER_SETTINGS - } - - _empty_settings_file() - edit_settings_data(updated_settings) - - with open(Files.CONTROLLER_SETTINGS, 'r') as f: - new_settings: dict = json.load(f) - assert new_settings[DictKeys.ACE_NAME] == ExistingSettings.ACE_NAME, f"{DictKeys.ACE_NAME} should be updated" - assert new_settings[DictKeys.LAYER_SETTINGS] == ExistingSettings.LAYER_SETTINGS, f"{DictKeys.LAYER_SETTINGS} should be updated" - assert new_settings[DictKeys.MODEL_PROVIDER_SETTINGS] == ExistingSettings.MODEL_PROVIDER_SETTINGS, f"{DictKeys.MODEL_PROVIDER_SETTINGS} should be updated" diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py deleted file mode 100644 index 5ebd2802..00000000 --- a/tests/unit/conftest.py +++ /dev/null @@ -1,32 +0,0 @@ -# DEPENDENCIES -## Built-In -from pathlib import Path -import shutil -import sys - - -PROJECT_ROOT = Path(__file__).parent.parent.parent -sys.path.insert(0, str(PROJECT_ROOT / "app")) -sys.path.insert(0, str(PROJECT_ROOT / "tests")) - - -# POST TESTING CLEANUP -from app.constants.folders import _ENSURED_FOLDERS -def pytest_sessionfinish(session, exitstatus): - """Clean up after the test session.""" - print("\nCleaning up test directories...") - for folder in _ENSURED_FOLDERS: - folder_path = Path(folder) - if folder_path.exists(): - try: - shutil.rmtree(folder_path) - print(f"Removed: {folder_path}") - except PermissionError: - print(f"Warning: Could not remove {folder_path} - Permission denied") - except Exception as e: - print(f"Warning: Could not remove {folder_path} - {str(e)}") - if session.testsfailed > 0: - print("Tests failed!") - # Force exit status to 1 if any tests failed - session.exitstatus = 1 - return session.exitstatus diff --git a/tests/unit/constants/__init__.py b/tests/unit/constants/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/constants/test_base_enum.py b/tests/unit/constants/test_base_enum.py deleted file mode 100644 index 3e85242a..00000000 --- a/tests/unit/constants/test_base_enum.py +++ /dev/null @@ -1,52 +0,0 @@ -# DEPENDENCIES -## Third-Party -import pytest -## Local -from app.constants.base_enum import BaseEnum - -def test_type_checking(): - """Test that invalid types raise a TypeError.""" - class ValidEnum(BaseEnum): - VALID_ATTR = "value" # String - VALID_ATTR2 = 123 # Integer - VALID_ATTR3 = 0.2 # Float - - # Test non type hinted attributes - with pytest.raises(TypeError): - class InvalidEnum(BaseEnum): - INVALID_ATTR = {"key": "value"} - INVALID_ATTR2 = True - - # Test type hinted attributes - with pytest.raises(TypeError): - class InvalidEnum(BaseEnum): - INVALID_ATTR: dict = {"key": "value"} - INVALID_ATTR2: bool = True - -def test_get_dict(): - """Test that get_dict() returns the correct dictionary.""" - class TestEnum(BaseEnum): - ATTR1 = "value1" - ATTR2 = "value2" - _PRIVATE_ATTR = "private" - - expected_dict: dict[str, str] = {"ATTR1": "value1", "ATTR2": "value2"} - assert TestEnum.get_dict() == expected_dict, "get_dict() should return the correct dictionary" - -def test_get_tuple(): - """Test that get_tuple() returns the correct tuple.""" - class TestEnum(BaseEnum): - ATTR1 = "value1" - ATTR2 = "value2" - - expected_tuple: tuple[str, str] = ("value1", "value2") - assert TestEnum.get_tuple() == expected_tuple, "get_tuple() should return the correct tuple" - -def test_get_frozenset(): - """Test that get_frozenset() returns the correct frozenset.""" - class TestEnum(BaseEnum): - ATTR1 = "value1" - ATTR2 = "value2" - - expected_set: frozenset[str] = frozenset(["value1", "value2"]) - assert TestEnum.get_frozenset() == expected_set, "get_frozenset() should return the correct frozenset" diff --git a/tests/unit/constants/test_files.py b/tests/unit/constants/test_files.py deleted file mode 100644 index 304b01e3..00000000 --- a/tests/unit/constants/test_files.py +++ /dev/null @@ -1,56 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -import importlib -import json -## Third-Party -import pytest -import yaml -## Local -from app.constants.files import _ENSURE_JSON_FILES, Files, setup_user_deployment_file - - -# HELPERS -@pytest.fixture -def _ensure_app_directory(): - os.chdir("./app") - yield - os.chdir("..") - -def _cleanup(): - for file in _ENSURE_JSON_FILES: - if os.path.isfile(file): - os.remove(file) - - -# TESTS -def test_setup_user_deployment_file_creates_valid_yaml_file(_ensure_app_directory): - """Test that setup_user_deployment_file creates a valid deployment.yaml file without placeholders""" - def check_deployment_file(dev: bool): - env_keyword: str = "dev" if dev else "prod" - setup_user_deployment_file(dev=dev) - if not os.path.isfile(Files.USER_DEPLOYMENT_FILE): - raise Exception("user_deployment.yaml file not created") - with open(Files.USER_DEPLOYMENT_FILE, "r") as f: - content: str = f.read() - assert "{{" not in content and "}}" not in content, "All placeholders should be replaced" - assert env_keyword in content, f"Environment should be set to {env_keyword} when creating deployment file with dev={dev}" - yaml.safe_load(content) - check_deployment_file(dev=True) - check_deployment_file(dev=False) - -def test_ensure_json_files_creates_valid_json_files(): - """Test that _ensure_json_files creates the necessary JSON files""" - _cleanup() - - from app import constants - importlib.reload(constants) # Ensure folders & files are auto created on module import - from app.constants import files - importlib.reload(files) # Ensure files are auto created on module import - - for file in _ENSURE_JSON_FILES: - with open(file, "r") as f: - content: str = f.read() - json_content: dict = json.loads(content) - assert content.strip() == "{}", "JSON file should be an empty dictionary" - assert json_content == {}, "JSON file should be an empty dictionary" diff --git a/tests/unit/constants/test_folder.py b/tests/unit/constants/test_folder.py deleted file mode 100644 index 367700a1..00000000 --- a/tests/unit/constants/test_folder.py +++ /dev/null @@ -1,27 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -import importlib -import shutil -## Local -from app.constants.folders import _ENSURED_FOLDERS - - -# HELPERS -def _cleanup(): - for folder in _ENSURED_FOLDERS: - if os.path.isdir(folder): - shutil.rmtree(folder) - - -# TESTS -def test_ensure_folders_creates_folders(): - """Test that _ensure_json_files creates the necessary JSON files""" - _cleanup() - - from app.constants import folders - importlib.reload(folders) # Ensure folders are auto created on module import - - for folder in _ENSURED_FOLDERS: - if not os.path.isdir(folder): - raise Exception(f"Folder {folder} does not exist!") diff --git a/tests/unit/test_component.py b/tests/unit/test_component.py deleted file mode 100644 index c38d0ff1..00000000 --- a/tests/unit/test_component.py +++ /dev/null @@ -1,59 +0,0 @@ -# DEPENDENCIES -## Built-In -from unittest.mock import patch, MagicMock -## Third-Party -import pytest -## Local -from app.component import run_component -from app.constants import Components - - -def test_run_component_no_environment_specified(monkeypatch): - """Test run_component with no environment specified""" - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with("You must select a environment, either --dev or --prod!") - -def test_run_component_multiple_components(monkeypatch): - """Test run_component with multiple components specified""" - with patch("argparse.ArgumentParser.parse_args") as mock_parse_args: - mock_args = MagicMock() - mock_args.dev = True - mock_args[Components.CONTROLLER] = True - mock_args[Components.UI] = True - mock_parse_args.return_value = mock_args - - # Mock logger.critical and exit - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with("You can only start one component at a time!") - -def test_run_component_invalid_component(monkeypatch): - """Test run_component with an invalid component specified.""" - invalid_component: str = "invalid_component" - with patch("argparse.ArgumentParser.parse_args") as mock_parse_args: - mock_args = MagicMock() - mock_args.dev = True - mock_args[invalid_component] = True - mock_parse_args.return_value = mock_args - - # Mock logger.critical and exit - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with(f"{invalid_component} is not a valid component!") - -def test_run_component_no_component_selected(monkeypatch): - """Test run_component with no component selected.""" - with patch("argparse.ArgumentParser.parse_args") as mock_parse_args: - mock_args = MagicMock() - mock_args.dev = True - # No component flags set - mock_parse_args.return_value = mock_args - - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with("You must select a component to start!") diff --git a/tests/unit/test_logger.py b/tests/unit/test_logger.py deleted file mode 100644 index 776641e5..00000000 --- a/tests/unit/test_logger.py +++ /dev/null @@ -1,185 +0,0 @@ -# DEPENDENCIES -## Built-In -import json -import logging -import os -import signal -import sys -from unittest import mock -## Third-Party -import pytest -## Local -from app.constants import DictKeys, Defaults, EnvironmentVariables, Folders -from tests.unit.testing_constants import TestingConfigs, Modules - - -# HELPERS -def _get_log_files() -> list[str]: - return [ - os.path.join(Folders.LOGS, f) - for f in os.listdir(Folders.LOGS) - if f.endswith('.log') - ] - -def _cleanup_module(): - if Modules.LOGGER in sys.modules: - del sys.modules[Modules.LOGGER] - from app.logger import _Logger - _Logger._instance = None - if Modules.LOGGER in sys.modules: - del sys.modules[Modules.LOGGER] - -def _cleanup_log_files(): - for f in _get_log_files(): - os.remove(f) - - - - -# TESTS -def test_singleton_enforcement(cleanup): - """Ensure only one logger instance exists""" - from app.logger import _Logger - logger1 = _Logger(TestingConfigs.LOG_FILE_NAME, False) - logger2 = _Logger(TestingConfigs.LOG_FILE_NAME, False) - assert logger1 is logger2 - -def test_missing_environment_variables(cleanup): - """Test required environment variables validation""" - with mock.patch.dict(os.environ, clear=True): - if Modules.LOGGER in sys.modules: - del sys.modules[Modules.LOGGER] - with pytest.raises(SystemError): - from app.logger import logger # noqa: F401 - -def test_file_handler_creation(cleanup): - """Verify log file is created in correct location""" - from app.logger import logger - - logger.info("Test message") - logger.error("Test message") - - assert len(_get_log_files()) > 0, "No log file created in test directory" - - with open(_get_log_files()[0]) as f: - content = f.read() - assert "Test message" in content, "Log message missing from file" - -def test_verbose_mode_handler_config(monkeypatch, cleanup): - """Test handler configuration based on verbosity""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_ENABLED) - from app.logger import logger - - file_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.FileHandler)] - console_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.StreamHandler) and handler == logger.console_handler] - - assert len(file_handlers) == 1, "Should have 1 FileHandler" - assert len(console_handlers) == 0, "Should have 0 ConsoleHandlers in verbose mode" - -def test_non_verbose_mode_handler_config(monkeypatch, cleanup): - """Test handler configuration based on verbosity""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_DISABLED) - from app.logger import logger - - file_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.FileHandler)] - console_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.StreamHandler) and handler == logger.console_handler] - - assert len(file_handlers) == 1, "Should have 1 FileHandler" - assert len(console_handlers) == 1, "Should have 1 ConsoleHandlers in non verbose mode" - -def test_shutdown_cleanup(cleanup): - """Verify handlers close properly on shutdown""" - from app.logger import logger - - initial_handlers: int = len(logger.logger.handlers) - - logger._register_shutdown_handlers() - signal_handlers = signal.getsignal(signal.SIGTERM) - if isinstance(signal_handlers, list): - signal_handlers[0]() - else: - signal_handlers() - - assert len(logger.logger.handlers) < initial_handlers - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == Defaults.SHUTDOWN_MESSAGE - assert content[DictKeys.LEVEL] == "WARNING" - -def test_debug_logging_non_verbose_mode(monkeypatch, cleanup): - """Debug messages should NOT appear in logs when verbose=False""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_DISABLED) - from app.logger import logger - - logger.debug("Debug test in non-verbose mode") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Debug test in non-verbose mode" - -def test_debug_logging_verbose_mode(monkeypatch, cleanup): - """Debug messages should appear in logs when verbose=True""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_ENABLED) - - from app.logger import logger - - logger.debug("Debug test in verbose mode") - logger.info("Info test in verbose mode") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] != "Debug test in verbose mode" - -def test_stacktrace_on_error(cleanup): - """Verify stacktrace is logged on error""" - from app.logger import logger - - logger.error("Error test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Error test" - assert content[DictKeys.STACKTRACE] - -def test_stacktrace_on_critical(cleanup): - """Verify stacktrace is logged on critical error""" - from app.logger import logger - - logger.error("Critical test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Critical test" - assert content[DictKeys.STACKTRACE] - -def test_startup_message(cleanup): - """Verify startup message is logged""" - from app.logger import logger - - logger.startup("Startup test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Startup test" - assert content[DictKeys.LEVEL] == "STARTUP" - -def test_info_message(cleanup): - """Verify info message is logged""" - from app.logger import logger - - logger.info("Info test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Info test" - assert content[DictKeys.LEVEL] == "INFO" - - -# CLEANUP -@pytest.fixture(autouse=True) -def cleanup(): - _cleanup_module() - _cleanup_log_files() - yield - _cleanup_module() diff --git a/tests/unit/test_shell.py b/tests/unit/test_shell.py deleted file mode 100644 index 79d4e098..00000000 --- a/tests/unit/test_shell.py +++ /dev/null @@ -1,38 +0,0 @@ -# DEPENDENCIES -## Third-Party -import pytest -## Local -from app.shell import execute_shell, shell_check_exists - - -@pytest.mark.parametrize("command,expected_output", [ - ("echo 'test'", "test\n"), - ("ls -a", ".\n..\n") -]) -def test_execute_shell(command, expected_output, caplog): - """Test the execute_shell function with various commands.""" - output: str = execute_shell(command) - assert expected_output in output, f"Expected '{expected_output}' in output, but got '{output}'" - with pytest.raises(SystemExit): - execute_shell("invalid_command", ignore_error=False, _testing=True) - error_output: str = execute_shell("invalid_command", ignore_error=True) - assert any(msg in error_output for msg in [ - "invalid_command: command not found", - "/bin/sh: 1: invalid_command: not found" - ]), "Error message should be printed" - -def test_shell_check_exists(): - """Test the shell_check_exists function.""" - result = shell_check_exists("ls -a", ".") - assert result is True, "Expected True, but got False" - result = shell_check_exists("ls -a", "non_existent_file") - assert result is False, "Expected False, but got True" - -def test_should_print_result(capsys): - """Test the should_print_result parameter.""" - execute_shell("echo 'test'", should_print_result=True) - captured = capsys.readouterr() - assert "test\n" in captured.out, "Output should be printed" - execute_shell("echo 'test'", should_print_result=False) - captured = capsys.readouterr() - assert "test\n" not in captured.out, "Output should not be printed" diff --git a/tests/unit/testing_constants.py b/tests/unit/testing_constants.py deleted file mode 100644 index 92f2741e..00000000 --- a/tests/unit/testing_constants.py +++ /dev/null @@ -1,8 +0,0 @@ -class Modules: - CONSTANTS: str = "app.constants" - LOGGER: str = "app.logger" - -class TestingConfigs: - LOG_FILE_NAME: str = "test" - VERBOSE_ENABLED: str = "." - VERBOSE_DISABLED: str = ""