From ba62b44426e95bdd93d08301032d636475b264a7 Mon Sep 17 00:00:00 2001 From: Viswamedha Nalabotu Date: Sat, 17 Jan 2026 13:23:52 +0000 Subject: [PATCH] Hard reset --- .dockerignore | 36 - .editorconfig | 13 - .gitignore | 56 - .gitlab-ci.yml | 40 - .prettierignore | 6 - .prettierrc | 3 - .vscode/extensions.json | 7 - .vscode/launch.json | 23 - .vscode/settings.json | 34 - ARCHITECTURE.md | 331 - README.md | 59 - apps/__init__.py | 0 apps/agents/__init__.py | 0 apps/agents/admin.py | 23 - apps/agents/apps.py | 6 - apps/agents/consumers.py | 163 - apps/agents/migrations/0001_initial.py | 66 - ...nt_options_alter_agentexecution_options.py | 21 - apps/agents/migrations/__init__.py | 0 apps/agents/models.py | 88 - apps/agents/routing.py | 7 - apps/agents/serializers.py | 26 - apps/agents/tasks.py | 135 - apps/agents/viewsets.py | 57 - apps/domains/__init__.py | 0 apps/domains/admin.py | 65 - apps/domains/apps.py | 6 - apps/domains/migrations/0001_initial.py | 60 - ...omainmembership_domain_members_and_more.py | 105 - apps/domains/migrations/__init__.py | 0 apps/domains/models.py | 124 - apps/domains/serializers.py | 83 - apps/domains/tests.py | 267 - apps/domains/views.py | 3 - apps/domains/viewsets.py | 246 - apps/users/__init__.py | 0 apps/users/admin.py | 26 - apps/users/apps.py | 5 - apps/users/managers.py | 27 - apps/users/migrations/0001_initial.py | 44 - apps/users/migrations/__init__.py | 0 apps/users/models.py | 76 - apps/users/serializers.py | 8 - apps/users/tests/__init__.py | 0 apps/users/tests/test_api_list.py | 57 - apps/users/tests/test_auth_actions.py | 641 -- apps/users/tests/test_models.py | 121 - apps/users/viewsets.py | 149 - compose/dev/celery/Dockerfile | 19 - compose/dev/docker-compose.yml | 127 - compose/dev/mcp/Dockerfile | 46 - compose/dev/node/Dockerfile | 15 - compose/dev/python/Dockerfile | 23 - compose/prod/celery/Dockerfile | 26 - compose/prod/docker-compose.local.yml | 58 - compose/prod/docker-compose.yml | 111 - compose/prod/python/Dockerfile | 50 - compose/prod/start | 27 - config/__init__.py | 3 - config/__pycache__/__init__.cpython-313.pyc | Bin 222 -> 0 bytes config/__pycache__/__init__.cpython-314.pyc | Bin 122 -> 0 bytes config/__pycache__/settings.cpython-313.pyc | Bin 6863 -> 0 bytes config/__pycache__/settings.cpython-314.pyc | Bin 2492 -> 0 bytes config/__pycache__/urls.cpython-314.pyc | Bin 983 -> 0 bytes config/__pycache__/wsgi.cpython-314.pyc | Bin 603 -> 0 bytes config/api.py | 16 - config/asgi.py | 20 - config/celery.py | 8 - config/settings.py | 207 - config/urls.py | 14 - config/views.py | 14 - config/wsgi.py | 5 - data/site/1users.json | 26 - data/site/2agents.json | 50 - documents/Features.pdf | Bin 50200 -> 0 bytes eslint.config.mjs | 56 - index.html | 16 - manage.py | 22 - mcp_agent/__init__.py | 0 mcp_agent/mcp_client.py | 129 - mcp_agent/mcp_server.py | 308 - notebooks/.gitignore | 1 - .../documents/fNIRS_Glossary_Hardware.docx | Bin 59103 -> 0 bytes notebooks/external-model-testing.ipynb | 148 - notebooks/fine-tune-local-model.ipynb | 643 -- .../local-model-rag-implementation.ipynb | 198 - notebooks/remote-agent-testing.ipynb | 391 - package-lock.json | 8367 ----------------- package.json | 47 - public/android-chrome-192x192.png | Bin 44016 -> 0 bytes public/android-chrome-512x512.png | Bin 352907 -> 0 bytes public/apple-touch-icon.png | Bin 40071 -> 0 bytes public/favicon-16x16.png | Bin 637 -> 0 bytes public/favicon-32x32.png | Bin 1708 -> 0 bytes public/favicon.ico | Bin 15406 -> 0 bytes public/site.webmanifest | 1 - requirements/base.txt | 20 - requirements/local.txt | Bin 8104 -> 0 bytes requirements/prod.txt | 1 - src/app/App.vue | 275 - src/lib/api.ts | 77 - src/main.ts | 11 - src/router/index.ts | 128 - src/stores/agentStore.ts | 271 - src/stores/authStore.ts | 159 - src/styles.css | 44 - src/views/AboutView.vue | 134 - src/views/AgentDetail.vue | 411 - src/views/Agents.vue | 98 - src/views/Assessments.vue | 60 - src/views/HomeView.vue | 329 - src/views/InviteAccept.vue | 179 - src/views/LoginView.vue | 106 - src/views/OnboardingFlow.vue | 87 - src/views/OrganizationManage.vue | 485 - src/views/OrganizationView.vue | 226 - src/views/ProgressDashboard.vue | 79 - src/views/RegisterView.vue | 172 - src/views/Resources.vue | 49 - src/views/RoleProfiles.vue | 71 - src/views/TrainingModule.vue | 71 - src/vue-shims.d.ts | 5 - tsconfig.json | 42 - vite.config.ts | 25 - 124 files changed, 18120 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .editorconfig delete mode 100644 .gitignore delete mode 100644 .gitlab-ci.yml delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json delete mode 100644 ARCHITECTURE.md delete mode 100644 README.md delete mode 100644 apps/__init__.py delete mode 100644 apps/agents/__init__.py delete mode 100644 apps/agents/admin.py delete mode 100644 apps/agents/apps.py delete mode 100644 apps/agents/consumers.py delete mode 100644 apps/agents/migrations/0001_initial.py delete mode 100644 apps/agents/migrations/0002_alter_agent_options_alter_agentexecution_options.py delete mode 100644 apps/agents/migrations/__init__.py delete mode 100644 apps/agents/models.py delete mode 100644 apps/agents/routing.py delete mode 100644 apps/agents/serializers.py delete mode 100644 apps/agents/tasks.py delete mode 100644 apps/agents/viewsets.py delete mode 100644 apps/domains/__init__.py delete mode 100644 apps/domains/admin.py delete mode 100644 apps/domains/apps.py delete mode 100644 apps/domains/migrations/0001_initial.py delete mode 100644 apps/domains/migrations/0002_alter_domain_options_domainmembership_domain_members_and_more.py delete mode 100644 apps/domains/migrations/__init__.py delete mode 100644 apps/domains/models.py delete mode 100644 apps/domains/serializers.py delete mode 100644 apps/domains/tests.py delete mode 100644 apps/domains/views.py delete mode 100644 apps/domains/viewsets.py delete mode 100644 apps/users/__init__.py delete mode 100644 apps/users/admin.py delete mode 100644 apps/users/apps.py delete mode 100644 apps/users/managers.py delete mode 100644 apps/users/migrations/0001_initial.py delete mode 100644 apps/users/migrations/__init__.py delete mode 100644 apps/users/models.py delete mode 100644 apps/users/serializers.py delete mode 100644 apps/users/tests/__init__.py delete mode 100644 apps/users/tests/test_api_list.py delete mode 100644 apps/users/tests/test_auth_actions.py delete mode 100644 apps/users/tests/test_models.py delete mode 100644 apps/users/viewsets.py delete mode 100644 compose/dev/celery/Dockerfile delete mode 100644 compose/dev/docker-compose.yml delete mode 100644 compose/dev/mcp/Dockerfile delete mode 100644 compose/dev/node/Dockerfile delete mode 100644 compose/dev/python/Dockerfile delete mode 100644 compose/prod/celery/Dockerfile delete mode 100644 compose/prod/docker-compose.local.yml delete mode 100644 compose/prod/docker-compose.yml delete mode 100644 compose/prod/python/Dockerfile delete mode 100644 compose/prod/start delete mode 100644 config/__init__.py delete mode 100644 config/__pycache__/__init__.cpython-313.pyc delete mode 100644 config/__pycache__/__init__.cpython-314.pyc delete mode 100644 config/__pycache__/settings.cpython-313.pyc delete mode 100644 config/__pycache__/settings.cpython-314.pyc delete mode 100644 config/__pycache__/urls.cpython-314.pyc delete mode 100644 config/__pycache__/wsgi.cpython-314.pyc delete mode 100644 config/api.py delete mode 100644 config/asgi.py delete mode 100644 config/celery.py delete mode 100644 config/settings.py delete mode 100644 config/urls.py delete mode 100644 config/views.py delete mode 100644 config/wsgi.py delete mode 100644 data/site/1users.json delete mode 100644 data/site/2agents.json delete mode 100644 documents/Features.pdf delete mode 100644 eslint.config.mjs delete mode 100644 index.html delete mode 100644 manage.py delete mode 100644 mcp_agent/__init__.py delete mode 100644 mcp_agent/mcp_client.py delete mode 100644 mcp_agent/mcp_server.py delete mode 100644 notebooks/.gitignore delete mode 100644 notebooks/documents/fNIRS_Glossary_Hardware.docx delete mode 100644 notebooks/external-model-testing.ipynb delete mode 100644 notebooks/fine-tune-local-model.ipynb delete mode 100644 notebooks/local-model-rag-implementation.ipynb delete mode 100644 notebooks/remote-agent-testing.ipynb delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 public/android-chrome-192x192.png delete mode 100644 public/android-chrome-512x512.png delete mode 100644 public/apple-touch-icon.png delete mode 100644 public/favicon-16x16.png delete mode 100644 public/favicon-32x32.png delete mode 100644 public/favicon.ico delete mode 100644 public/site.webmanifest delete mode 100644 requirements/base.txt delete mode 100644 requirements/local.txt delete mode 100644 requirements/prod.txt delete mode 100644 src/app/App.vue delete mode 100644 src/lib/api.ts delete mode 100644 src/main.ts delete mode 100644 src/router/index.ts delete mode 100644 src/stores/agentStore.ts delete mode 100644 src/stores/authStore.ts delete mode 100644 src/styles.css delete mode 100644 src/views/AboutView.vue delete mode 100644 src/views/AgentDetail.vue delete mode 100644 src/views/Agents.vue delete mode 100644 src/views/Assessments.vue delete mode 100644 src/views/HomeView.vue delete mode 100644 src/views/InviteAccept.vue delete mode 100644 src/views/LoginView.vue delete mode 100644 src/views/OnboardingFlow.vue delete mode 100644 src/views/OrganizationManage.vue delete mode 100644 src/views/OrganizationView.vue delete mode 100644 src/views/ProgressDashboard.vue delete mode 100644 src/views/RegisterView.vue delete mode 100644 src/views/Resources.vue delete mode 100644 src/views/RoleProfiles.vue delete mode 100644 src/views/TrainingModule.vue delete mode 100644 src/vue-shims.d.ts delete mode 100644 tsconfig.json delete mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 5256733..0000000 --- a/.dockerignore +++ /dev/null @@ -1,36 +0,0 @@ -*.sqlite3 -__pycache__/ -*.pyc -*.pyo -*.pyd -*.db -*.log -*.pot -*.mo -*.swp -.DS_Store -.env -.vscode/ -.idea/ -.git/ -.github/ -.gitignore -.editorconfig -.prettierrc -.prettierignore -.nx/ -venv/ -env/ -ENV/ -.venv/ -node_modules/ -build/ -dist/ -*.egg-info/ -celerybeat-schedule -*.md -*.bat -notebooks/ -documents/ -models/ -eslint.config.mjs \ No newline at end of file diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 2e8b0ef..0000000 --- a/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -# Editor configuration, see http://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = tab -indent_size = 4 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore deleted file mode 100644 index c20c39d..0000000 --- a/.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -# See https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files for more about ignoring files. - -# compiled output -dist -build -tmp -out-tsc - -# dependencies -node_modules - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# misc -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings - -# System Files -.DS_Store -Thumbs.db - -.nx/cache -.nx/workspace-data -.cursor/rules/nx-rules.mdc -.github/instructions/nx.instructions.md - -vite.config.*.timestamp* -vitest.config.*.timestamp* - -.env -static -.github -__pycache__/ - -*.sqlite3 -*.local.bat \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 966a8cb..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,40 +0,0 @@ -stages: - - test - - build - -run_tests: - stage: test - image: python:3.12 - variables: - DJANGO_SECRET_KEY: 'random_secret_key_for_ci' - before_script: - - python -m pip install --upgrade pip - - pip install --no-cache-dir -r requirements/base.txt - script: - - python manage.py test --verbosity=2 - rules: - - if: $CI_COMMIT_BRANCH == "main" - -build_and_push: - stage: build - image: docker:24.0.7 - variables: - DOCKER_HOST: tcp://docker:2375 - DOCKER_TLS_CERTDIR: '' - services: - - name: docker:24.0.7-dind - alias: docker - command: ['--tls=false', '--host=tcp://0.0.0.0:2375'] - script: - - echo "Waiting for Docker daemon..." - - for i in $(seq 1 30); do docker info && break || sleep 1; done - - echo "Logging in to registry ${REGISTRY_URL}" - - echo "$REGISTRY_PASSWORD" | docker login -u "$REGISTRY_USERNAME" --password-stdin "$REGISTRY_URL" - - export IMAGE_NAME="${REGISTRY_URL}/${IMAGE_PATH}:${IMAGE_TAG}" - - echo "Building image ${IMAGE_NAME}" - - docker build -t "$IMAGE_NAME" -f ./compose/prod/python/Dockerfile --no-cache . - - echo "Pushing image ${IMAGE_NAME}" - - docker push "$IMAGE_NAME" - rules: - - if: $CI_COMMIT_TAG - when: always diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 525c41a..0000000 --- a/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -# Add files here to ignore them from prettier formatting -/dist -/build -/coverage -/.nx/cache -/.nx/workspace-data \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 544138b..0000000 --- a/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": true -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 462e29b..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "recommendations": [ - "nrwl.angular-console", - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint" - ] -} diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index cdfed78..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Debug api with Nx", - "runtimeExecutable": "npx", - "runtimeArgs": ["nx", "serve", "api"], - "env": { - "NODE_OPTIONS": "--inspect=9229" - }, - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "skipFiles": ["/**"], - "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/apps/api/dist/**/*.(m|c|)js", - "!**/node_modules/**" - ] - } - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 95aedd5..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "editor.tabSize": 4, - "editor.insertSpaces": false, - "editor.detectIndentation": false, - - "files.trimTrailingWhitespace": true, - - "files.eol": "\n", - - "editor.formatOnSave": true, - - "eslint.validate": [ - "javascript", - "javascriptreact", - "typescript", - "typescriptreact", - "vue" - ], - - "[vue]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.tabSize": 4, - "editor.insertSpaces": false - }, - - "[typescript]": { - "editor.tabSize": 4, - "editor.insertSpaces": false - }, - "[javascript]": { - "editor.tabSize": 4, - "editor.insertSpaces": false - } -} diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md deleted file mode 100644 index 7c07c7d..0000000 --- a/ARCHITECTURE.md +++ /dev/null @@ -1,331 +0,0 @@ -# Agent System Architecture Diagram - -## System Overview (current stack) - -Docker Compose (dev) services on one network: - -- `web` (Vite dev) :5173 -- `api` (Django + Channels) :8000 -- `celery` worker shares Django code -- `fyp-redis` broker/channel :6379 -- `mcp-agent-server` MCP runtime :8001 (HTTP) - -MCP wiring: - -- `MCP_AGENT_URL=http://mcp-agent-server:8001` (required) -- MCP server runs in HTTP mode, exposes `/execute` and `/health` endpoints -- All agent execution delegates to the remote MCP server (no local LLM fallback) - -Flow: Frontend → API (HTTP), Frontend ↔ AgentConsumer (WS), API queues Celery, Celery calls MCP server over HTTP, events return via Redis → Channels → WS. - -``` -┌──────────────────────────────────────────────────────────────────────────┐ -│ FRONTEND (Vue 3 + TypeScript) │ -├──────────────────────────────────────────────────────────────────────────┤ -│ │ -│ ┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐ │ -│ │ Agents.vue │ │ AgentDetail.vue │ │ agentStore.ts │ │ -│ ├─────────────────┤ ├──────────────────────┤ ├─────────────────────┤ │ -│ │ • List agents │ │ • Run execution │ │ • WebSocket connect │ │ -│ │ • Fetch from API│ │ • JSON input │ │ • Event handling │ │ -│ │ • Show status │ │ • Live log display │ │ • State management │ │ -│ └────────┬────────┘ │ • Stop button │ │ • Auto-reconnect │ │ -│ │ │ • Status indicator │ │ • Type-safe API │ │ -│ │ └────────┬─────────────┘ └─────────────────────┘ │ -│ │ │ │ -└───────────┼────────────────────┼─────────────────────────────────────────┘ - │ │ - │ │ WebSocket - │ HTTP/REST │ - ▼ ▼ -┌──────────────────────────────────────────────────────────────────────────┐ -│ BACKEND (Django + Channels) │ -├──────────────────────────────────────────────────────────────────────────┤ -│ │ -│ ┌─────────────────┐ ┌──────────────────────────┐ ┌─────────────────┐ │ -│ │ AgentViewSet │ │ AgentConsumer │ │ Middleware │ │ -│ ├─────────────────┤ ├──────────────────────────┤ ├─────────────────┤ │ -│ │ REST API: │ │ WebSocket Handler: │ │ • Auth check │ │ -│ │ • GET /agent/ │ │ • connect() │ │ • User validate │ │ -│ │ • POST /agent/ │ │ • receive() │ │ • Group mgmt │ │ -│ │ • GET /agent/id │ │ • handle_start_agent() │ └─────────────────┘ │ -│ │ │ │ • handle_stop_agent() │ │ -│ │ Returns: Agent │ │ • agent_event() │ ┌─────────────────┐ │ -│ │ metadata │ │ • agent_completed() │ │ Serializers │ │ -│ └────────┬────────┘ │ • agent_error() │ ├─────────────────┤ │ -│ │ └────────┬─────────────────┘ │ • AgentSerializer │ -│ │ │ │ • ExecutionSer. │ │ -│ │ │ │ • EventSerializer │ -│ │ │ └────────┬────────┘ │ -│ │ │ │ │ -│ ▼ ▼ ▼ │ -│ ┌─────────────────────────────────────────────────────────────────┐ │ -│ │ Django Database (SQLite/PostgreSQL) │ │ -│ ├─────────────────────────────────────────────────────────────────┤ │ -│ │ • Agent (uuid, name, description, status, user) │ │ -│ │ • AgentExecution (uuid, input_data, output_data, status) │ │ -│ │ • AgentEvent (uuid, event_type, content, timestamp) │ │ -│ └─────────────────────────────────────────────────────────────────┘ │ -│ │ -└──────────────────────┬───────────────────────────────────────────────────┘ - │ - │ Celery Task Queue - ▼ -┌──────────────────────────────────────────────────────────────────────────┐ -│ CELERY WORKER PROCESS │ -├──────────────────────────────────────────────────────────────────────────┤ -│ │ -│ ┌──────────────────────────────────────────────────────────────────┐ │ -│ │ start_agent_task_mcp() [MCP-only execution] │ │ -│ ├──────────────────────────────────────────────────────────────────┤ │ -│ │ ┌──────────────────────────────────────────────────────────┐ │ │ -│ │ │ 1. Initialize & Output "started" event │ │ │ -│ │ │ │ │ │ -│ │ │ 2. Call MCPAgentClient.execute_agent() │ │ │ -│ │ │ └─ POST to {MCP_AGENT_URL}/execute │ │ │ -│ │ │ with: agent_id, query, input_data │ │ │ -│ │ │ │ │ │ -│ │ │ 3. Await response from MCP server │ │ │ -│ │ │ (handles all RAG, LLM, context retrieval) │ │ │ -│ │ │ │ │ │ -│ │ │ 4. Forward any events from MCP to WebSocket │ │ │ -│ │ │ └─ Progress, message, step events displayed live │ │ │ -│ │ │ │ │ │ -│ │ │ 5. Save result & Output "completed" event │ │ │ -│ │ │ └─ Send via Channel Layer to WebSocket Group │ │ │ -│ │ │ │ │ │ -│ │ └──────────────────────────────────────────────────────────┘ │ │ -│ └──────────────────────────────────────────────────────────────────┘ │ -│ │ -└──────────────────────┬───────────────────────────────────────────────────┘ - │ - │ Channel Layer Broadcast - ▼ -┌──────────────────────────────────────────────────────────────────────────┐ -│ REDIS (Message Broker & Cache) │ -├──────────────────────────────────────────────────────────────────────────┤ -│ • Celery task queue │ -│ • Channel layer for WebSocket group communication │ -│ • Session cache (optional) │ -└──────────────────────────────────────────────────────────────────────────┘ -``` - -MCP Runtime (HTTP mode) - -- Service: `mcp-agent-server` (container `dynavera-mcp-agent`) -- Listens on `0.0.0.0:8001` with `/execute` and `/health` HTTP endpoints -- Handles all agent execution: RAG retrieval, LLM inference, context management -- Shares code and `build/rag_db` read-only from host -- Completely separate from Django/Celery; communicates only via HTTP - -## Execution Flow Sequence - -``` -Frontend Backend LLM System - │ │ │ - ├─ User Input ──────────────>│ │ - │ (JSON via WebSocket) │ │ - │ │ │ - │ ├─ Create Execution │ - │ │ Record │ - │ │ │ - │ ├─ Queue Celery Task │ - │ │ │ - │<── execution_started ──────┤ │ - │ (WebSocket message) │ │ - │ │ │ - │ ├─ Output "initializing" │ - │<── agent_event ────────────┤ │ - │ (WebSocket) │ │ - │ │ │ - │ ├─ Load GPT4All Model │ - │ │ │ - │ │─────────────────────────>│ Load Model - │ │ (~10-30 seconds) │ - │ │<───────────────────────── Model Ready - │ │ │ - │ ├─ Output "retrieving" │ - │<── agent_event ────────────┤ │ - │ (WebSocket) │ │ - │ │ │ - │ ├─ Query RAG DB (if exists) │ - │ │ (ChromaDB) │ - │ │ │ - │ ├─ Output "generating" │ - │<── agent_event ────────────┤ │ - │ (WebSocket) │ │ - │ │ │ - │ │───────────────────────────>│ Generate - │ │ generate(prompt, │ Response - │ │ max_tokens=200) │ - │ │<───────────────────────── Response - │ │ (5-30 seconds) │ - │ │ │ - │<── execution_completed ────┤ │ - │ (WebSocket with output) │ │ - │ │ │ - └ Display Log & Result │ │ -``` - -## Data Flow: Input to Output - -``` -User Enters JSON - ↓ -{"query": "What is fNIRS?"} - ↓ -Frontend sends via WebSocket - ↓ - ┌─────────────────────────────────────┐ - │ AgentConsumer.receive(text_data) │ - └──────────────┬──────────────────────┘ - │ - ├─ Parse JSON - ├─ Validate action - └─ Route to handler - ↓ - ┌─────────────────────────────────────┐ - │ handle_start_agent() │ - ├─────────────────────────────────────┤ - │ • Get agent from DB │ - │ • Create AgentExecution │ - │ • Queue Celery task │ - └──────────────┬──────────────────────┘ - │ - ├─ Send execution_started event - │ (back to WebSocket) - │ - ├─ Queue in Celery/Redis - │ - ┌──────────────┴──────────────────────┐ - │ │ - ▼ ▼ -Celery Worker Database Updated - │ │ - ├─ Fetch execution │ - ├─ Initialize models │ - ├─ Send progress events │ - │ │ - ├─ Query RAG (if available) │ - │ ├─ Load embedder │ - │ ├─ Connect to ChromaDB │ - │ └─ Query for context │ - │ │ - ├─ Initialize LLM │ - │ ├─ Load GPT4All model │ - │ └─ Prepare prompt │ - │ │ - ├─ Generate response │ - │ └─ model.generate() │ - │ │ - ├─ Create result dict │ - │ │ - ├─ Save to AgentExecution │ - │ ├─ output_data │ - │ ├─ status = 'completed' │ - │ └─ completed_at │ - │ │ - └─ Send via Channel Layer - to WebSocket Group - │ - ├─ event_type: agent_event - ├─ event_type: agent_completed - │ - ▼ - Frontend receives - │ - ├─ Update agentStore - ├─ Push to eventLog - ├─ Display in UI - │ - ▼ - User sees result -``` - -## Component Interaction - -``` -┌─────────────────────────────────────────────────────────┐ -│ FRONTEND STATE MANAGEMENT │ -├─────────────────────────────────────────────────────────┤ -│ │ -│ agentStore (Pinia) │ -│ ├─ socket: WebSocket connection │ -│ ├─ isConnected: boolean │ -│ ├─ agentId: UUID │ -│ ├─ currentExecutionId: UUID │ -│ ├─ executionStatus: 'idle'|'running'|'completed' │ -│ ├─ events: Array │ -│ │ │ -│ ├─ connect(agentId) │ -│ ├─ startAgent(inputData) │ -│ ├─ stopAgent() │ -│ ├─ disconnect() │ -│ └─ handleMessage(data) │ -│ │ -│ AgentDetail.vue (Uses Store) │ -│ ├─ Subscribes to: │ -│ │ ├─ agentStore.isConnected │ -│ │ ├─ agentStore.executionStatus │ -│ │ └─ agentStore.eventLog │ -│ │ │ -│ └─ Calls: │ -│ ├─ agentStore.connect() on mount │ -│ ├─ agentStore.startAgent() on button click │ -│ ├─ agentStore.disconnect() on unmount │ -│ └─ agentStore.stopAgent() on stop button │ -│ │ -└─────────────────────────────────────────────────────────┘ -``` - -## Message Type Mapping - -``` -WebSocket Message Type → Handler Function → Event Display - -"execution_started" → handleMessage → "Started" tag + message -"agent_event" → handleMessage → Event type specific - ├─ "progress" → Display stage → [PROGRESS] stage: message - ├─ "message" → Display text → [MESSAGE] content - └─ "step" → Display step → [STEP] content - -"execution_completed" → handleMessage → "Completed" tag + output -"execution_error" → handleMessage → "Error" tag + message -"execution_stopped" → handleMessage → "Stopped" tag + message -"error" → handleMessage → "Error" tag + message -"connection" → handleMessage → Console log -``` - -## Database Schema Relationships - -``` -User (from auth) - │ - ├─────── (1:N) ─────────> Agent - │ ├─ uuid (PK) - │ ├─ name - │ ├─ description - │ ├─ status - │ ├─ created_at - │ └─ updated_at - │ │ - │ ├─────── (1:N) ──────────> AgentExecution - │ ├─ uuid (PK) - │ ├─ status - │ ├─ input_data (JSON) - │ ├─ output_data (JSON) - │ ├─ error_message - │ ├─ created_at - │ ├─ started_at - │ ├─ completed_at - │ │ │ - │ │ ├─ (1:N) ──> AgentEvent - │ │ ├─ uuid (PK) - │ │ ├─ event_type - │ │ ├─ content (JSON) - │ │ └─ timestamp - │ │ - │ └─ user_id (FK) - │ │ - └──────────────────────────────────────────────────────────────────┘ -``` diff --git a/README.md b/README.md deleted file mode 100644 index f109089..0000000 --- a/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# An Agentic Approach to Domain-Specific Trainers - Dynavera - -A proof-of-concept platform for **automating the induction and support of new hires or team members** into a role or domain using **AI agents**. This project demonstrates a reusable workflow that combines a modern full-stack application with AI-driven guidance and assessment. - ---- - -## Table of Contents - -- [Project Goals](#project-goals) -- [Tech Stack](#tech-stack) -- [Features](#features) -- [Usage](#usage) - ---- - -## Project Goals - -The main objectives of this project are: - -1. **Reusable Workflow** – Create a pipeline that can automatically onboard and guide new hires or team members in a specific domain. -2. **AI Agent Integration** – Use intelligent agents to provide guidance, monitor progress, and adapt learning to individual users. -3. **Real-World Testing** – Evaluate the suitability and effectiveness of the tool in realistic onboarding scenarios. -4. **Domain Specific Trainers** – Support the creation of trainers specialized for different roles, fields, or industries. - ---- - -## Tech Stack - -- **Backend:** [Django](https://www.djangoproject.com/) -- **Frontend:** [Vue 3](https://vuejs.org/) + [Vite](https://vitejs.dev/) -- **AI Agents:** Python-based agents (TBD) -- **Containerization:** Docker + Docker Compose -- **Database:** (TBD) -- **Authentication:** JWT / OAuth2 / Custom Managed (TBD) - ---- - -## Architecture - -See [ARCHITECTURE.md](./ARCHITECTURE.md) for a detailed system overview, component interaction, execution flow, and data flow diagrams. - -## Features - -- Automated onboarding workflow for new hires. -- Role/domain-specific AI training modules. -- Adaptive guidance and personalized learning paths. -- Dashboard for tracking user progress and feedback. -- Modular AI agent integration (Python/JS). -- Extensible to multiple domains and roles. - ---- - -## Usage - -1. Navigate to the frontend URL (hosted at `https://project.viswamedha.com`). -2. Register a new user or login. -3. Select the role/domain to train in. -4. Follow the guided AI-assisted onboarding workflow. -5. Track progress and view recommendations on the dashboard. diff --git a/apps/__init__.py b/apps/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/agents/__init__.py b/apps/agents/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/agents/admin.py b/apps/agents/admin.py deleted file mode 100644 index 9a1c411..0000000 --- a/apps/agents/admin.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.contrib import admin -from apps.agents.models import Agent, AgentExecution, AgentEvent - - -@admin.register(Agent) -class AgentAdmin(admin.ModelAdmin): - list_display = ('name', 'user', 'status', 'created_at') - list_filter = ('status', 'created_at') - search_fields = ('name', 'description') - - -@admin.register(AgentExecution) -class AgentExecutionAdmin(admin.ModelAdmin): - list_display = ('agent', 'user', 'status', 'created_at') - list_filter = ('status', 'created_at') - search_fields = ('agent__name',) - - -@admin.register(AgentEvent) -class AgentEventAdmin(admin.ModelAdmin): - list_display = ('event_type', 'execution', 'timestamp') - list_filter = ('event_type', 'timestamp') - search_fields = ('execution__agent__name',) \ No newline at end of file diff --git a/apps/agents/apps.py b/apps/agents/apps.py deleted file mode 100644 index 72be4bf..0000000 --- a/apps/agents/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class AgentsConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'apps.agents' \ No newline at end of file diff --git a/apps/agents/consumers.py b/apps/agents/consumers.py deleted file mode 100644 index 4ce7cfa..0000000 --- a/apps/agents/consumers.py +++ /dev/null @@ -1,163 +0,0 @@ -import json -from channels.generic.websocket import AsyncWebsocketConsumer -from channels.db import database_sync_to_async -from apps.agents.models import Agent, AgentExecution, AgentEvent -from apps.agents.tasks import start_agent_task_mcp - - -class AgentConsumer(AsyncWebsocketConsumer): - async def connect(self): - self.user = self.scope["user"] - self.agent_id = self.scope['url_route']['kwargs'].get('agent_id') - self.room_group_name = f"agent_{self.agent_id}" - - if not self.user.is_authenticated: - await self.close() - return - - await self.channel_layer.group_add(self.room_group_name, self.channel_name) - await self.accept() - await self.send(json.dumps({ - "type": "connection", - "message": "Connected to agent stream", - "agent_id": str(self.agent_id) - })) - - async def disconnect(self, close_code): - await self.channel_layer.group_discard(self.room_group_name, self.channel_name) - - async def receive(self, text_data): - try: - data = json.loads(text_data) - action = data.get('action') - - if action == 'start_agent': - await self.handle_start_agent(data) - elif action == 'stop_agent': - await self.handle_stop_agent(data) - else: - await self.send(json.dumps({ - "type": "error", - "message": f"Unknown action: {action}" - })) - except json.JSONDecodeError: - await self.send(json.dumps({ - "type": "error", - "message": "Invalid JSON" - })) - except Exception as e: - await self.send(json.dumps({ - "type": "error", - "message": str(e) - })) - - async def handle_start_agent(self, data): - input_data = data.get('input_data', {}) - - agent = await self.get_agent(self.agent_id, self.user) - if not agent: - await self.send(json.dumps({ - "type": "error", - "message": "Agent not found" - })) - return - - execution = await self.create_execution(agent, self.user, input_data) - - await self.send(json.dumps({ - "type": "execution_started", - "execution_id": str(execution.uuid), - "agent_id": str(agent.uuid), - "message": f"Agent execution {execution.uuid} queued" - })) - - try: - from apps.agents.tasks import start_agent_task_mcp - - print(f"[Consumer] Queuing MCP execution for {execution.uuid}") - start_agent_task_mcp.delay(str(execution.uuid)) - - except Exception as e: - print(f"Error queuing agent task: {e}") - await self.send(json.dumps({ - "type": "execution_error", - "execution_id": str(execution.uuid), - "error_message": str(e) - })) - - async def handle_stop_agent(self, data): - execution_id = data.get('execution_id') - execution = await self.get_execution(execution_id, self.user) - - if not execution: - await self.send(json.dumps({ - "type": "error", - "message": "Execution not found" - })) - return - - await self.update_execution_status(execution, 'failed') - await self.send(json.dumps({ - "type": "execution_stopped", - "execution_id": str(execution.uuid), - "message": "Agent execution stopped by user" - })) - - async def agent_event(self, event): - await self.send(json.dumps({ - "type": "agent_event", - "event_type": event['event_type'], - "content": event['content'], - "timestamp": event['timestamp'] - })) - - async def agent_completed(self, event): - await self.send(json.dumps({ - "type": "execution_completed", - "execution_id": event['execution_id'], - "output_data": event['output_data'], - "message": "Agent execution completed" - })) - - async def agent_error(self, event): - await self.send(json.dumps({ - "type": "execution_error", - "execution_id": event['execution_id'], - "error_message": event['error_message'] - })) - - @database_sync_to_async - def get_agent(self, agent_id, user): - try: - return Agent.objects.get(uuid=agent_id, user=user) - except Agent.DoesNotExist: - return None - - @database_sync_to_async - def get_execution(self, execution_id, user): - try: - return AgentExecution.objects.get(uuid=execution_id, user=user) - except AgentExecution.DoesNotExist: - return None - - @database_sync_to_async - def create_execution(self, agent, user, input_data): - return AgentExecution.objects.create( - agent=agent, - user=user, - input_data=input_data - ) - - @database_sync_to_async - def update_execution_status(self, execution, status): - execution.status = status - execution.save() - return execution - - @database_sync_to_async - def create_event(self, execution, event_type, content): - return AgentEvent.objects.create( - execution=execution, - event_type=event_type, - content=content - ) diff --git a/apps/agents/migrations/0001_initial.py b/apps/agents/migrations/0001_initial.py deleted file mode 100644 index f7fbb30..0000000 --- a/apps/agents/migrations/0001_initial.py +++ /dev/null @@ -1,66 +0,0 @@ -# Generated by Django 5.2.8 on 2025-12-17 14:05 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Agent', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('name', models.CharField(max_length=255)), - ('description', models.TextField(blank=True, default='')), - ('status', models.CharField(choices=[('idle', 'Idle'), ('running', 'Running'), ('paused', 'Paused'), ('completed', 'Completed'), ('failed', 'Failed')], default='idle', max_length=20)), - ('task_id', models.CharField(blank=True, max_length=255, null=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('started_at', models.DateTimeField(blank=True, null=True)), - ('completed_at', models.DateTimeField(blank=True, null=True)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='agents', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='AgentExecution', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('status', models.CharField(choices=[('queued', 'Queued'), ('running', 'Running'), ('completed', 'Completed'), ('failed', 'Failed')], default='queued', max_length=20)), - ('input_data', models.JSONField(default=dict)), - ('output_data', models.JSONField(blank=True, default=dict)), - ('error_message', models.TextField(blank=True, default='')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('started_at', models.DateTimeField(blank=True, null=True)), - ('completed_at', models.DateTimeField(blank=True, null=True)), - ('agent', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='executions', to='agents.agent')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='agent_executions', to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='AgentEvent', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('event_type', models.CharField(choices=[('started', 'Started'), ('message', 'Message'), ('progress', 'Progress'), ('completed', 'Completed'), ('error', 'Error'), ('step', 'Step')], max_length=20)), - ('content', models.JSONField()), - ('timestamp', models.DateTimeField(auto_now_add=True)), - ('execution', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='events', to='agents.agentexecution')), - ], - options={ - 'verbose_name': 'Agent Event', - 'verbose_name_plural': 'Agent Events', - 'ordering': ['timestamp'], - }, - ), - ] diff --git a/apps/agents/migrations/0002_alter_agent_options_alter_agentexecution_options.py b/apps/agents/migrations/0002_alter_agent_options_alter_agentexecution_options.py deleted file mode 100644 index 2b8f6a6..0000000 --- a/apps/agents/migrations/0002_alter_agent_options_alter_agentexecution_options.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.2.8 on 2025-12-17 17:27 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('agents', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='agent', - options={'verbose_name': 'Agent', 'verbose_name_plural': 'Agents'}, - ), - migrations.AlterModelOptions( - name='agentexecution', - options={'verbose_name': 'Agent Execution', 'verbose_name_plural': 'Agent Executions'}, - ), - ] diff --git a/apps/agents/migrations/__init__.py b/apps/agents/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/agents/models.py b/apps/agents/models.py deleted file mode 100644 index 340f09c..0000000 --- a/apps/agents/models.py +++ /dev/null @@ -1,88 +0,0 @@ -from django.db import models -from django.utils import timezone -from apps.users.models import User -import uuid - - -class Agent(models.Model): - STATUS_CHOICES = [ - ('idle', 'Idle'), - ('running', 'Running'), - ('paused', 'Paused'), - ('completed', 'Completed'), - ('failed', 'Failed'), - ] - - uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) - user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='agents') - name = models.CharField(max_length=255) - description = models.TextField(blank=True, default="") - status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='idle') - task_id = models.CharField(max_length=255, blank=True, null=True) - - created_at = models.DateTimeField(auto_now_add=True) - updated_at = models.DateTimeField(auto_now=True) - started_at = models.DateTimeField(null=True, blank=True) - completed_at = models.DateTimeField(null=True, blank=True) - - def __str__(self) -> str: - return f"{self.name} ({self.status})" - - class Meta: - verbose_name = "Agent" - verbose_name_plural = "Agents" - - -class AgentExecution(models.Model): - uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) - agent = models.ForeignKey(Agent, on_delete=models.CASCADE, related_name='executions') - user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='agent_executions') - - status = models.CharField(max_length=20, choices=[ - ('queued', 'Queued'), - ('running', 'Running'), - ('completed', 'Completed'), - ('failed', 'Failed'), - ], default='queued') - - input_data = models.JSONField(default=dict) - output_data = models.JSONField(default=dict, blank=True) - error_message = models.TextField(blank=True, default="") - - created_at = models.DateTimeField(auto_now_add=True) - started_at = models.DateTimeField(null=True, blank=True) - completed_at = models.DateTimeField(null=True, blank=True) - - def __str__(self) -> str: - return f"Execution {self.uuid} - {self.agent.name} ({self.status})" - - class Meta: - verbose_name = "Agent Execution" - verbose_name_plural = "Agent Executions" - - -class AgentEvent(models.Model): - EVENT_TYPES = [ - ('started', 'Started'), - ('message', 'Message'), - ('progress', 'Progress'), - ('completed', 'Completed'), - ('error', 'Error'), - ('step', 'Step'), - ] - - uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) - execution = models.ForeignKey(AgentExecution, on_delete=models.CASCADE, related_name='events') - event_type = models.CharField(max_length=20, choices=EVENT_TYPES) - - content = models.JSONField() - timestamp = models.DateTimeField(auto_now_add=True) - - def __str__(self) -> str: - return f"{self.id} - {self.event_type} - {self.execution.agent.name}" - - class Meta: - ordering = ['timestamp'] - verbose_name = "Agent Event" - verbose_name_plural = "Agent Events" - diff --git a/apps/agents/routing.py b/apps/agents/routing.py deleted file mode 100644 index 07e7d37..0000000 --- a/apps/agents/routing.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.urls import path -from apps.agents import consumers - - -websocket_urlpatterns = [ - path('ws/agents//', consumers.AgentConsumer.as_asgi()), -] diff --git a/apps/agents/serializers.py b/apps/agents/serializers.py deleted file mode 100644 index 9ac12c8..0000000 --- a/apps/agents/serializers.py +++ /dev/null @@ -1,26 +0,0 @@ -from rest_framework import serializers -from apps.agents.models import Agent, AgentExecution, AgentEvent - - -class AgentEventSerializer(serializers.ModelSerializer): - class Meta: - model = AgentEvent - fields = ['uuid', 'event_type', 'content', 'timestamp'] - - -class AgentExecutionSerializer(serializers.ModelSerializer): - events = AgentEventSerializer(many=True, read_only=True) - - class Meta: - model = AgentExecution - fields = ['uuid', 'agent', 'user', 'status', 'input_data', 'output_data', 'error_message', 'created_at', 'started_at', 'completed_at', 'events'] - read_only_fields = ['uuid', 'created_at', 'started_at', 'completed_at', 'events'] - - -class AgentSerializer(serializers.ModelSerializer): - executions = AgentExecutionSerializer(many=True, read_only=True) - - class Meta: - model = Agent - fields = ['uuid', 'user', 'name', 'description', 'status', 'task_id', 'created_at', 'updated_at', 'started_at', 'completed_at', 'executions'] - read_only_fields = ['uuid', 'user', 'created_at', 'updated_at'] diff --git a/apps/agents/tasks.py b/apps/agents/tasks.py deleted file mode 100644 index 0685655..0000000 --- a/apps/agents/tasks.py +++ /dev/null @@ -1,135 +0,0 @@ -from celery import shared_task -from django.utils import timezone -from channels.layers import get_channel_layer -from asgiref.sync import async_to_sync -from apps.agents.models import Agent, AgentExecution, AgentEvent -import json -from django.conf import settings -import asyncio - - -@shared_task -def start_agent_task_mcp(execution_id): - print(f"invoked with execution_id={execution_id}") - try: - execution = AgentExecution.objects.get(uuid=execution_id) - print(f"execution record loaded: agent={execution.agent.uuid}") - execution.status = 'running' - execution.started_at = timezone.now() - execution.save() - - channel_layer = get_channel_layer() - room_group_name = f"agent_{execution.agent.uuid}" - - try: - async_to_sync(channel_layer.group_send)( - room_group_name, - { - "type": "agent_event", - "event_type": "started", - "content": { - "execution_id": str(execution.uuid), - "agent_id": str(execution.agent.uuid), - "message": "Agent execution started" - }, - "timestamp": timezone.now().isoformat() - } - ) - except Exception as channel_error: - print(f"Channel layer error: {channel_error}") - - AgentEvent.objects.create( - execution=execution, - event_type='started', - content={"execution_id": str(execution.uuid), "method": "mcp"} - ) - - from mcp_agent.mcp_client import MCPAgentClient - - async def execute_remote(): - async with MCPAgentClient() as client: - return await client.execute_agent( - agent_id=str(execution.agent.uuid), - agent_name=execution.agent.name, - execution_id=str(execution.uuid), - query=execution.input_data.get("query", ""), - input_data=execution.input_data - ) - - result = asyncio.run(execute_remote()) - print(f"MCP result: {result.get('status')}") - - if result.get('events'): - for event in result['events']: - try: - async_to_sync(channel_layer.group_send)( - room_group_name, - { - "type": "agent_event", - "event_type": event.get('type', 'message'), - "content": event, - "timestamp": event.get('timestamp', timezone.now().isoformat()) - } - ) - except Exception as e: - print(f"Error forwarding event: {e}") - - - if result.get('status') == 'completed': - execution.status = 'completed' - execution.output_data = result - elif result.get('status') in ['failed', 'error']: - execution.status = 'failed' - execution.error_message = result.get('error', 'Unknown error') - execution.output_data = result - else: - execution.status = 'completed' - execution.output_data = result - - execution.completed_at = timezone.now() - execution.save() - - try: - async_to_sync(channel_layer.group_send)( - room_group_name, - { - "type": "agent_completed", - "execution_id": str(execution.uuid), - "output_data": result - } - ) - except Exception as channel_error: - print(f"Channel layer error: {channel_error}") - - AgentEvent.objects.create( - execution=execution, - event_type='completed', - content={"execution_id": str(execution.uuid), "output": result} - ) - - except AgentExecution.DoesNotExist: - print(f"Execution {execution_id} not found") - except Exception as e: - print(f"exception: {e}") - import traceback - traceback.print_exc() - try: - execution = AgentExecution.objects.get(uuid=execution_id) - execution.status = 'failed' - execution.error_message = str(e) - execution.completed_at = timezone.now() - execution.save() - - channel_layer = get_channel_layer() - room_group_name = f"agent_{execution.agent.uuid}" - async_to_sync(channel_layer.group_send)( - room_group_name, - { - "type": "agent_error", - "execution_id": str(execution.uuid), - "error_message": str(e) - } - ) - except: - pass - diff --git a/apps/agents/viewsets.py b/apps/agents/viewsets.py deleted file mode 100644 index 7024101..0000000 --- a/apps/agents/viewsets.py +++ /dev/null @@ -1,57 +0,0 @@ -from rest_framework import viewsets -from rest_framework.decorators import action -from rest_framework.response import Response -from rest_framework.permissions import IsAuthenticated -from apps.agents.models import Agent, AgentExecution -from apps.agents.serializers import AgentSerializer, AgentExecutionSerializer -from apps.agents.tasks import start_agent_task_mcp - - -class AgentViewSet(viewsets.ModelViewSet): - serializer_class = AgentSerializer - permission_classes = [IsAuthenticated] - lookup_field = 'uuid' - - def get_queryset(self): - return Agent.objects.filter(user=self.request.user) - - def perform_create(self, serializer): - serializer.save(user=self.request.user) - - @action(detail=True, methods=['post']) - def start(self, request, uuid=None): - agent = self.get_object() - input_data = request.data.get('input_data', {}) - - execution = AgentExecution.objects.create( - agent=agent, - user=request.user, - input_data=input_data - ) - - start_agent_task_mcp.delay(str(execution.uuid)) - - serializer = AgentExecutionSerializer(execution) - return Response({ - "status": "queued", - "execution": serializer.data, - "message": "Agent task queued for execution" - }) - - -class AgentExecutionViewSet(viewsets.ReadOnlyModelViewSet): - serializer_class = AgentExecutionSerializer - permission_classes = [IsAuthenticated] - lookup_field = 'uuid' - - def get_queryset(self): - return AgentExecution.objects.filter(user=self.request.user) - - @action(detail=True, methods=['get']) - def events(self, request, uuid=None): - execution = self.get_object() - events = execution.events.all().values() - return Response({ - "execution_id": str(execution.uuid), - "events": list(events) - }) diff --git a/apps/domains/__init__.py b/apps/domains/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/domains/admin.py b/apps/domains/admin.py deleted file mode 100644 index 7d850fa..0000000 --- a/apps/domains/admin.py +++ /dev/null @@ -1,65 +0,0 @@ -from django.contrib import admin -from apps.domains.models import Domain, Organization, Dataset, OrganizationMembership, InviteToken, DomainMembership - - -@admin.register(Organization) -class OrganizationAdmin(admin.ModelAdmin): - list_display = ('name', 'owner', 'uuid', 'created_at', 'updated_at') - search_fields = ('name', 'owner__email_address') - readonly_fields = ('uuid', 'created_at', 'updated_at') - fieldsets = ( - (None, {'fields': ('name', 'uuid', 'description')}), - ('Ownership', {'fields': ('owner',)}), - ('Dates', {'fields': ('created_at', 'updated_at')}), - ) - - -@admin.register(OrganizationMembership) -class OrganizationMembershipAdmin(admin.ModelAdmin): - list_display = ('user', 'organization', 'role', 'created_at') - list_filter = ('role', 'created_at') - search_fields = ('user__email_address', 'organization__name') - readonly_fields = ('created_at', 'updated_at') - - -@admin.register(InviteToken) -class InviteTokenAdmin(admin.ModelAdmin): - list_display = ('organization', 'created_by', 'expires_at', 'is_active', 'used_by', 'used_at') - list_filter = ('is_active', 'created_at', 'expires_at') - search_fields = ('organization__name', 'created_by__email_address', 'token') - readonly_fields = ('token', 'created_at', 'updated_at') - - -@admin.register(Domain) -class DomainAdmin(admin.ModelAdmin): - list_display = ('name', 'organization', 'uuid') - list_filter = ('organization',) - search_fields = ('name', 'organization__name') - readonly_fields = ('uuid',) - fieldsets = ( - (None, {'fields': ('name', 'uuid')}), - ('Description', {'fields': ('description',)}), - ('Organization', {'fields': ('organization',)}), - ) - - -@admin.register(DomainMembership) -class DomainMembershipAdmin(admin.ModelAdmin): - list_display = ('user', 'domain', 'created_at') - list_filter = ('created_at',) - search_fields = ('user__email_address', 'domain__name') - readonly_fields = ('created_at', 'updated_at') - - -@admin.register(Dataset) -class DatasetAdmin(admin.ModelAdmin): - list_display = ('name', 'domain', 'uuid', 'created_by', 'created_at') - search_fields = ('name', 'domain__name') - readonly_fields = ('uuid', 'created_at', 'updated_at') - fieldsets = ( - (None, {'fields': ('name', 'uuid')}), - ('Details', {'fields': ('domain', 'description', 'created_by')}), - ('File', {'fields': ('datafile',)}), - ('Dates', {'fields': ('created_at', 'updated_at')}), - ) - diff --git a/apps/domains/apps.py b/apps/domains/apps.py deleted file mode 100644 index fde2e06..0000000 --- a/apps/domains/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class DomainsConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'apps.domains' diff --git a/apps/domains/migrations/0001_initial.py b/apps/domains/migrations/0001_initial.py deleted file mode 100644 index 253101c..0000000 --- a/apps/domains/migrations/0001_initial.py +++ /dev/null @@ -1,60 +0,0 @@ -# Generated by Django 5.2.8 on 2025-12-07 15:22 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Domain', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255, unique=True)), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('description', models.TextField(blank=True, default='')), - ], - ), - migrations.CreateModel( - name='Dataset', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('name', models.CharField(max_length=255)), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('description', models.TextField(blank=True, default='')), - ('datafile', models.FileField(upload_to='datasets/')), - ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_datasets', to=settings.AUTH_USER_MODEL)), - ('domain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='datasets', to='domains.domain')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='Organisation', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('name', models.CharField(max_length=255, unique=True)), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('domains', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='organisations', to='domains.domain')), - ('employees', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='organisations', to=settings.AUTH_USER_MODEL)), - ('managers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='managed_organisations', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/domains/migrations/0002_alter_domain_options_domainmembership_domain_members_and_more.py b/apps/domains/migrations/0002_alter_domain_options_domainmembership_domain_members_and_more.py deleted file mode 100644 index a31f0ed..0000000 --- a/apps/domains/migrations/0002_alter_domain_options_domainmembership_domain_members_and_more.py +++ /dev/null @@ -1,105 +0,0 @@ -# Generated by Django 5.2.8 on 2025-12-17 17:27 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('domains', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AlterModelOptions( - name='domain', - options={'verbose_name': 'Domain', 'verbose_name_plural': 'Domains'}, - ), - migrations.CreateModel( - name='DomainMembership', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('domain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to='domains.domain')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='domain_memberships', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Domain Membership', - 'verbose_name_plural': 'Domain Memberships', - 'unique_together': {('user', 'domain')}, - }, - ), - migrations.AddField( - model_name='domain', - name='members', - field=models.ManyToManyField(related_name='domains', through='domains.DomainMembership', to=settings.AUTH_USER_MODEL), - ), - migrations.CreateModel( - name='Organization', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('name', models.CharField(max_length=255, unique=True)), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('description', models.TextField(blank=True, default='')), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='owned_organizations', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Organization', - 'verbose_name_plural': 'Organizations', - }, - ), - migrations.CreateModel( - name='InviteToken', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('token', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('expires_at', models.DateTimeField()), - ('used_at', models.DateTimeField(blank=True, null=True)), - ('is_active', models.BooleanField(default=True)), - ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_invites', to=settings.AUTH_USER_MODEL)), - ('used_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='used_invites', to=settings.AUTH_USER_MODEL)), - ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invite_tokens', to='domains.organization')), - ], - options={ - 'verbose_name': 'Invite Token', - 'verbose_name_plural': 'Invite Tokens', - }, - ), - migrations.AddField( - model_name='domain', - name='organization', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='domains', to='domains.organization'), - ), - migrations.CreateModel( - name='OrganizationMembership', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('role', models.CharField(choices=[('employer', 'Employer'), ('employee', 'Employee')], default='employee', max_length=50)), - ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to='domains.organization')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='organization_memberships', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Organization Membership', - 'verbose_name_plural': 'Organization Memberships', - 'unique_together': {('user', 'organization')}, - }, - ), - migrations.AddField( - model_name='organization', - name='members', - field=models.ManyToManyField(related_name='organizations', through='domains.OrganizationMembership', to=settings.AUTH_USER_MODEL), - ), - migrations.DeleteModel( - name='Organisation', - ), - ] diff --git a/apps/domains/migrations/__init__.py b/apps/domains/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/domains/models.py b/apps/domains/models.py deleted file mode 100644 index 9ce183f..0000000 --- a/apps/domains/models.py +++ /dev/null @@ -1,124 +0,0 @@ -from django.db.models import ( - CASCADE, - CharField, - FileField, - ForeignKey, - UUIDField, - Model, - TextField, - ManyToManyField, - DateTimeField, - BooleanField, - TextChoices, -) -from django.utils.translation import gettext_lazy as _ -from uuid import uuid4 -from datetime import timedelta -from django.utils import timezone - -from apps.users.models import TimeStampMixin, User - - -class Organization(TimeStampMixin, Model): - - name = CharField(max_length=255, unique=True) - uuid = UUIDField(default=uuid4, editable=False, unique=True) - description = TextField(blank=True, default="") - owner = ForeignKey(User, on_delete=CASCADE, related_name="owned_organizations") - members = ManyToManyField(User, through="OrganizationMembership", related_name="organizations") - - class Meta: - verbose_name = _("Organization") - verbose_name_plural = _("Organizations") - - def __str__(self) -> str: - return self.name - - -class OrganizationMembership(TimeStampMixin, Model): - - class Role(TextChoices): - EMPLOYER = "employer", _("Employer") - EMPLOYEE = "employee", _("Employee") - - user = ForeignKey(User, on_delete=CASCADE, related_name="organization_memberships") - organization = ForeignKey(Organization, on_delete=CASCADE, related_name="memberships") - role = CharField(max_length=50, choices=Role.choices, default=Role.EMPLOYEE) - - class Meta: - verbose_name = _("Organization Membership") - verbose_name_plural = _("Organization Memberships") - unique_together = [["user", "organization"]] - - def __str__(self) -> str: - return f"{self.user.full_name} - {self.organization.name} ({self.role})" - - -class InviteToken(TimeStampMixin, Model): - - token = UUIDField(default=uuid4, unique=True, editable=False) - organization = ForeignKey(Organization, on_delete=CASCADE, related_name="invite_tokens") - created_by = ForeignKey(User, on_delete=CASCADE, related_name="created_invites") - expires_at = DateTimeField() - used_by = ForeignKey(User, on_delete=CASCADE, null=True, blank=True, related_name="used_invites") - used_at = DateTimeField(null=True, blank=True) - is_active = BooleanField(default=True) - - class Meta: - verbose_name = _("Invite Token") - verbose_name_plural = _("Invite Tokens") - - def save(self, *args, **kwargs): - if not self.expires_at: - self.expires_at = timezone.now() + timedelta(days=7) - super().save(*args, **kwargs) - - def is_valid(self): - return self.is_active and not self.used_by and timezone.now() < self.expires_at - - def __str__(self) -> str: - return f"Invite for {self.organization.name} (expires {self.expires_at})" - - -class Domain(Model): - - name = CharField(max_length=255, unique=True) - uuid = UUIDField(default=uuid4, editable=False, unique=True) - description = TextField(blank=True, default="") - organization = ForeignKey(Organization, on_delete=CASCADE, related_name="domains", null=True, blank=True) - members = ManyToManyField(User, through="DomainMembership", related_name="domains") - - class Meta: - verbose_name = _("Domain") - verbose_name_plural = _("Domains") - - def __str__(self) -> str: - return self.name - - -class DomainMembership(TimeStampMixin, Model): - - user = ForeignKey(User, on_delete=CASCADE, related_name="domain_memberships") - domain = ForeignKey(Domain, on_delete=CASCADE, related_name="memberships") - - class Meta: - verbose_name = _("Domain Membership") - verbose_name_plural = _("Domain Memberships") - unique_together = [["user", "domain"]] - - def __str__(self) -> str: - return f"{self.user.full_name} - {self.domain.name}" - -class Dataset(TimeStampMixin, Model): - - domain = ForeignKey(Domain, on_delete = CASCADE, related_name = "datasets") - name = CharField(max_length = 255) - uuid = UUIDField(default = uuid4, editable = False, unique = True) - description = TextField(blank = True, default = "") - created_by = ForeignKey(User, on_delete = CASCADE, related_name = "created_datasets") - datafile = FileField(upload_to = "datasets/") - - def __str__(self) -> str: - return f"{self.name} ({self.domain.name})" - -Organisation = Organization \ No newline at end of file diff --git a/apps/domains/serializers.py b/apps/domains/serializers.py deleted file mode 100644 index bad38e7..0000000 --- a/apps/domains/serializers.py +++ /dev/null @@ -1,83 +0,0 @@ -from rest_framework import serializers -from rest_framework.serializers import ModelSerializer -from apps.domains.models import Domain, Organization, Dataset, OrganizationMembership, InviteToken, DomainMembership -from apps.users.serializers import UserSerializer - - -class OrganizationSerializer(serializers.ModelSerializer): - owner = UserSerializer(read_only=True) - member_count = serializers.SerializerMethodField() - domain_count = serializers.SerializerMethodField() - - class Meta: - model = Organization - fields = ['id', 'uuid', 'name', 'description', 'owner', 'created_at', 'updated_at', 'member_count', 'domain_count'] - read_only_fields = ['uuid', 'owner', 'created_at', 'updated_at'] - - def get_member_count(self, obj): - return obj.memberships.count() - - def get_domain_count(self, obj): - return obj.domains.count() - - -class OrganizationMembershipSerializer(serializers.ModelSerializer): - user = UserSerializer(read_only=True) - user_id = serializers.IntegerField(write_only=True, required=False) - - class Meta: - model = OrganizationMembership - fields = ['id', 'user', 'user_id', 'organization', 'role', 'created_at'] - read_only_fields = ['organization', 'created_at'] - - -class InviteTokenSerializer(serializers.ModelSerializer): - created_by = UserSerializer(read_only=True) - used_by = UserSerializer(read_only=True) - invite_url = serializers.SerializerMethodField() - is_valid = serializers.SerializerMethodField() - - class Meta: - model = InviteToken - fields = ['id', 'token', 'organization', 'created_by', 'expires_at', 'used_by', 'used_at', 'is_active', 'invite_url', 'is_valid', 'created_at'] - read_only_fields = ['token', 'organization', 'created_by', 'used_by', 'used_at', 'created_at'] - - def get_invite_url(self, obj): - request = self.context.get('request') - if request: - return request.build_absolute_uri(f'/invite/{obj.token}') - return f'/invite/{obj.token}' - - def get_is_valid(self, obj): - return obj.is_valid() - - -class DomainMembershipSerializer(serializers.ModelSerializer): - user = UserSerializer(read_only=True) - domain_name = serializers.CharField(source='domain.name', read_only=True) - - class Meta: - model = DomainMembership - fields = ['id', 'user', 'domain', 'domain_name', 'created_at'] - read_only_fields = ['created_at'] - - -class DomainSerializer(ModelSerializer): - organization = OrganizationSerializer(read_only=True) - organization_id = serializers.IntegerField(write_only=True, required=False, allow_null=True) - member_count = serializers.SerializerMethodField() - - class Meta: - model = Domain - fields = ['id', 'uuid', 'name', 'description', 'organization', 'organization_id', 'member_count'] - read_only_fields = ['uuid'] - - def get_member_count(self, obj): - return obj.memberships.count() - - -class DatasetSerializer(ModelSerializer): - - class Meta: - model = Dataset - fields = ['id', 'domain', 'name', 'description', 'uuid', 'created_by', 'datafile', 'created_at', 'updated_at'] diff --git a/apps/domains/tests.py b/apps/domains/tests.py deleted file mode 100644 index 140f24b..0000000 --- a/apps/domains/tests.py +++ /dev/null @@ -1,267 +0,0 @@ -from django.test import TestCase -from django.core.exceptions import ValidationError -from apps.domains.models import Domain, Organisation, Dataset -from apps.users.models import User -from uuid import uuid4 - - -class DomainTestCase(TestCase): - - def setUp(self): - self.domain1 = Domain.objects.create(name="Python", description="Python Programming") - self.domain2 = Domain.objects.create(name="JavaScript", description="JavaScript Development") - - def test_domain_creation(self): - self.assertEqual(self.domain1.name, "Python") - self.assertEqual(self.domain2.name, "JavaScript") - - def test_domain_string_representation(self): - self.assertEqual(str(self.domain1), "Python") - self.assertEqual(str(self.domain2), "JavaScript") - - def test_domain_name_unique(self): - with self.assertRaises(Exception): - Domain.objects.create(name="Python", description="Duplicate") - - def test_domain_description_blank(self): - domain = Domain.objects.create(name="Java") - self.assertEqual(domain.description, "") - - def test_domain_description_optional(self): - domain = Domain.objects.create(name="Rust", description="System Programming") - self.assertIsNotNone(domain.description) - - def test_domain_uuid_generated(self): - self.assertIsNotNone(self.domain1.uuid) - self.assertIsNotNone(self.domain2.uuid) - - def test_domain_uuid_unique(self): - uuid1 = self.domain1.uuid - uuid2 = self.domain2.uuid - self.assertNotEqual(uuid1, uuid2) - - def test_domain_uuid_immutable(self): - original_uuid = self.domain1.uuid - self.domain1.save() - self.assertEqual(self.domain1.uuid, original_uuid) - - def test_domain_count(self): - self.assertEqual(Domain.objects.count(), 2) - - def test_domain_filter_by_name(self): - domain = Domain.objects.get(name="Python") - self.assertEqual(domain.id, self.domain1.id) - - def test_domain_filter_by_uuid(self): - domain = Domain.objects.get(uuid=self.domain1.uuid) - self.assertEqual(domain.name, "Python") - - def test_domain_update_name(self): - self.domain1.name = "Python3" - self.domain1.save() - updated = Domain.objects.get(id=self.domain1.id) - self.assertEqual(updated.name, "Python3") - - def test_domain_update_description(self): - self.domain1.description = "Advanced Python" - self.domain1.save() - updated = Domain.objects.get(id=self.domain1.id) - self.assertEqual(updated.description, "Advanced Python") - - def test_domain_delete(self): - domain_id = self.domain1.id - self.domain1.delete() - with self.assertRaises(Domain.DoesNotExist): - Domain.objects.get(id=domain_id) - - def test_domain_all_fields(self): - self.assertTrue(hasattr(self.domain1, 'name')) - self.assertTrue(hasattr(self.domain1, 'uuid')) - self.assertTrue(hasattr(self.domain1, 'description')) - - def test_domain_max_length_name(self): - long_name = "a" * 255 - domain = Domain.objects.create(name=long_name) - self.assertEqual(domain.name, long_name) - - def test_domain_default_description(self): - domain = Domain.objects.create(name="Go") - self.assertEqual(domain.description, "") - - -class OrganisationTestCase(TestCase): - - def setUp(self): - self.user1 = User.objects.create_user(email_address="manager@test.com", password="pass123") - self.user2 = User.objects.create_user(email_address="employee@test.com", password="pass123") - self.domain = Domain.objects.create(name="Technology") - # Organization model uses `owner` and `members`. - self.org1 = Organisation.objects.create( - name="TechCorp", - owner=self.user1, - ) - # add member and link domain - self.org1.members.add(self.user2) - self.domain.organization = self.org1 - self.domain.save() - - def test_organisation_creation(self): - self.assertEqual(self.org1.name, "TechCorp") - - def test_organisation_string_representation(self): - self.assertEqual(str(self.org1), "TechCorp") - - def test_organisation_name_unique(self): - with self.assertRaises(Exception): - Organisation.objects.create( - name="TechCorp", - owner=self.user1, - ) - - def test_organisation_manager_relationship(self): - self.assertEqual(self.org1.owner, self.user1) - - def test_organisation_employee_relationship(self): - self.assertTrue(self.org1.members.filter(pk=self.user2.pk).exists()) - - def test_organisation_domain_relationship(self): - self.assertTrue(self.org1.domains.filter(pk=self.domain.pk).exists()) - - def test_organisation_uuid_generated(self): - self.assertIsNotNone(self.org1.uuid) - - def test_organisation_timestamps(self): - self.assertIsNotNone(self.org1.created_at) - self.assertIsNotNone(self.org1.updated_at) - - def test_organisation_created_at_updated_at_close_on_creation(self): - delta = abs((self.org1.created_at - self.org1.updated_at).total_seconds()) - self.assertLess(delta, 1) - - def test_organisation_update_changes_updated_at(self): - original_updated = self.org1.updated_at - import time - time.sleep(0.1) - self.org1.name = "TechCorp Updated" - self.org1.save() - self.assertGreater(self.org1.updated_at, original_updated) - - def test_organisation_count(self): - self.assertEqual(Organisation.objects.count(), 1) - - def test_organisation_filter_by_name(self): - org = Organisation.objects.get(name="TechCorp") - self.assertEqual(org.id, self.org1.id) - - def test_organisation_filter_by_manager(self): - orgs = Organisation.objects.filter(owner=self.user1) - self.assertEqual(orgs.count(), 1) - - def test_organisation_delete_cascade(self): - org_id = self.org1.id - self.org1.delete() - with self.assertRaises(Organisation.DoesNotExist): - Organisation.objects.get(id=org_id) - - def test_organisation_update_name(self): - self.org1.name = "NewTechCorp" - self.org1.save() - updated = Organisation.objects.get(id=self.org1.id) - self.assertEqual(updated.name, "NewTechCorp") - - -class DatasetTestCase(TestCase): - - def setUp(self): - self.user = User.objects.create_user(email_address="creator@test.com", password="pass123") - self.domain = Domain.objects.create(name="ML") - self.dataset1 = Dataset.objects.create( - domain=self.domain, - name="Training Data", - description="Training dataset for ML", - created_by=self.user - ) - - def test_dataset_creation(self): - self.assertEqual(self.dataset1.name, "Training Data") - - def test_dataset_string_representation(self): - self.assertEqual(str(self.dataset1), "Training Data (ML)") - - def test_dataset_domain_relationship(self): - self.assertEqual(self.dataset1.domain, self.domain) - - def test_dataset_created_by_relationship(self): - self.assertEqual(self.dataset1.created_by, self.user) - - def test_dataset_description_optional(self): - dataset = Dataset.objects.create( - domain=self.domain, - name="Test Data", - created_by=self.user - ) - self.assertEqual(dataset.description, "") - - def test_dataset_uuid_generated(self): - self.assertIsNotNone(self.dataset1.uuid) - - def test_dataset_timestamps(self): - self.assertIsNotNone(self.dataset1.created_at) - self.assertIsNotNone(self.dataset1.updated_at) - - def test_dataset_count(self): - self.assertEqual(Dataset.objects.count(), 1) - - def test_dataset_filter_by_domain(self): - datasets = Dataset.objects.filter(domain=self.domain) - self.assertEqual(datasets.count(), 1) - - def test_dataset_filter_by_creator(self): - datasets = Dataset.objects.filter(created_by=self.user) - self.assertEqual(datasets.count(), 1) - - def test_dataset_filter_by_name(self): - dataset = Dataset.objects.get(name="Training Data") - self.assertEqual(dataset.id, self.dataset1.id) - - def test_dataset_update_description(self): - self.dataset1.description = "Updated description" - self.dataset1.save() - updated = Dataset.objects.get(id=self.dataset1.id) - self.assertEqual(updated.description, "Updated description") - - def test_dataset_delete(self): - dataset_id = self.dataset1.id - self.dataset1.delete() - with self.assertRaises(Dataset.DoesNotExist): - Dataset.objects.get(id=dataset_id) - - def test_dataset_multiple_per_domain(self): - dataset2 = Dataset.objects.create( - domain=self.domain, - name="Test Data", - created_by=self.user - ) - datasets = Dataset.objects.filter(domain=self.domain) - self.assertEqual(datasets.count(), 2) - - def test_dataset_multiple_per_creator(self): - dataset2 = Dataset.objects.create( - domain=self.domain, - name="Test Data 2", - created_by=self.user - ) - datasets = Dataset.objects.filter(created_by=self.user) - self.assertEqual(datasets.count(), 2) - - def test_dataset_cascade_on_domain_delete(self): - dataset_id = self.dataset1.id - self.domain.delete() - with self.assertRaises(Dataset.DoesNotExist): - Dataset.objects.get(id=dataset_id) - - def test_dataset_cascade_on_user_delete(self): - dataset_id = self.dataset1.id - self.user.delete() - with self.assertRaises(Dataset.DoesNotExist): - Dataset.objects.get(id=dataset_id) diff --git a/apps/domains/views.py b/apps/domains/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/apps/domains/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/apps/domains/viewsets.py b/apps/domains/viewsets.py deleted file mode 100644 index bc7fa11..0000000 --- a/apps/domains/viewsets.py +++ /dev/null @@ -1,246 +0,0 @@ -from rest_framework.viewsets import ModelViewSet -from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly -from rest_framework.decorators import action -from rest_framework.response import Response -from rest_framework import status -from django.shortcuts import get_object_or_404 -from django.utils import timezone -from apps.domains.models import Domain, Organization, Dataset, OrganizationMembership, InviteToken, DomainMembership -from apps.domains.serializers import ( - DomainSerializer, - OrganizationSerializer, - DatasetSerializer, - OrganizationMembershipSerializer, - InviteTokenSerializer, - DomainMembershipSerializer, -) - - -class OrganizationViewSet(ModelViewSet): - queryset = Organization.objects.all() - serializer_class = OrganizationSerializer - permission_classes = [IsAuthenticated] - lookup_field = 'uuid' - - def get_queryset(self): - user = self.request.user - return Organization.objects.filter(memberships__user=user).distinct() - - def perform_create(self, serializer): - org = serializer.save(owner=self.request.user) - OrganizationMembership.objects.create( - organization=org, - user=self.request.user, - role=OrganizationMembership.Role.EMPLOYER - ) - - def update(self, request, *args, **kwargs): - org = self.get_object() - membership = OrganizationMembership.objects.filter( - organization=org, - user=request.user, - role=OrganizationMembership.Role.EMPLOYER - ).first() - if not membership: - return Response( - {"error": "Only employers can update organization details"}, - status=status.HTTP_403_FORBIDDEN - ) - return super().update(request, *args, **kwargs) - - @action(detail=True, methods=['get']) - def members(self, request, uuid=None): - org = self.get_object() - memberships = org.memberships.all() - serializer = OrganizationMembershipSerializer(memberships, many=True) - return Response(serializer.data) - - @action(detail=True, methods=['patch'], url_path='members/(?P[^/.]+)') - def update_member(self, request, uuid=None, user_id=None): - org = self.get_object() - membership = OrganizationMembership.objects.filter( - organization=org, - user=request.user, - role=OrganizationMembership.Role.EMPLOYER - ).first() - if not membership: - return Response( - {"error": "Only employers can update member roles"}, - status=status.HTTP_403_FORBIDDEN - ) - - target_membership = get_object_or_404(OrganizationMembership, organization=org, user_id=user_id) - serializer = OrganizationMembershipSerializer(target_membership, data=request.data, partial=True) - if serializer.is_valid(): - serializer.save() - return Response(serializer.data) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - @action(detail=True, methods=['delete'], url_path='members/(?P[^/.]+)') - def remove_member(self, request, uuid=None, user_id=None): - org = self.get_object() - membership = OrganizationMembership.objects.filter( - organization=org, - user=request.user, - role=OrganizationMembership.Role.EMPLOYER - ).first() - if not membership: - return Response( - {"error": "Only employers can remove members"}, - status=status.HTTP_403_FORBIDDEN - ) - - target_membership = get_object_or_404(OrganizationMembership, organization=org, user_id=user_id) - if target_membership.user == org.owner: - return Response( - {"error": "Cannot remove the organization owner"}, - status=status.HTTP_400_BAD_REQUEST - ) - target_membership.delete() - return Response(status=status.HTTP_204_NO_CONTENT) - - @action(detail=True, methods=['get', 'post']) - def invites(self, request, uuid=None): - org = self.get_object() - - if request.method == 'GET': - tokens = org.invite_tokens.filter(is_active=True, used_by__isnull=True) - serializer = InviteTokenSerializer(tokens, many=True, context={'request': request}) - return Response(serializer.data) - - elif request.method == 'POST': - membership = OrganizationMembership.objects.filter( - organization=org, - user=request.user, - role=OrganizationMembership.Role.EMPLOYER - ).first() - if not membership: - return Response( - {"error": "Only employers can create invites"}, - status=status.HTTP_403_FORBIDDEN - ) - - token = InviteToken.objects.create( - organization=org, - created_by=request.user - ) - serializer = InviteTokenSerializer(token, context={'request': request}) - return Response(serializer.data, status=status.HTTP_201_CREATED) - - @action(detail=True, methods=['delete'], url_path='invites/(?P[^/.]+)') - def revoke_invite(self, request, uuid=None, token=None): - org = self.get_object() - membership = OrganizationMembership.objects.filter( - organization=org, - user=request.user, - role=OrganizationMembership.Role.EMPLOYER - ).first() - if not membership: - return Response( - {"error": "Only employers can revoke invites"}, - status=status.HTTP_403_FORBIDDEN - ) - - invite = get_object_or_404(InviteToken, organization=org, token=token) - invite.is_active = False - invite.save() - return Response(status=status.HTTP_204_NO_CONTENT) - - @action(detail=True, methods=['get']) - def domains(self, request, uuid=None): - org = self.get_object() - domains = org.domains.all() - serializer = DomainSerializer(domains, many=True) - return Response(serializer.data) - - @action(detail=True, methods=['get'], url_path='domains/(?P[^/.]+)/members') - def domain_members(self, request, uuid=None, domain_id=None): - org = self.get_object() - domain = get_object_or_404(Domain, organization=org, id=domain_id) - memberships = domain.memberships.all() - serializer = DomainMembershipSerializer(memberships, many=True) - return Response(serializer.data) - - @action(detail=True, methods=['post'], url_path='domains/(?P[^/.]+)/members') - def add_domain_member(self, request, uuid=None, domain_id=None): - org = self.get_object() - domain = get_object_or_404(Domain, organization=org, id=domain_id) - - user_id = request.data.get('user_id') - org_membership = OrganizationMembership.objects.filter( - organization=org, - user_id=user_id - ).first() - - if not org_membership: - return Response( - {"error": "User must be a member of the organization first"}, - status=status.HTTP_400_BAD_REQUEST - ) - - domain_membership, created = DomainMembership.objects.get_or_create( - domain=domain, - user_id=user_id - ) - - serializer = DomainMembershipSerializer(domain_membership) - return Response(serializer.data, status=status.HTTP_201_CREATED if created else status.HTTP_200_OK) - - -class InviteViewSet(ModelViewSet): - queryset = InviteToken.objects.all() - serializer_class = InviteTokenSerializer - permission_classes = [IsAuthenticated] - lookup_field = 'token' - http_method_names = ['get', 'post'] - - def get_queryset(self): - return InviteToken.objects.filter(is_active=True, used_by__isnull=True) - - @action(detail=True, methods=['post']) - def accept(self, request, token=None): - invite = self.get_object() - - if not invite.is_valid(): - return Response( - {"error": "This invite is no longer valid"}, - status=status.HTTP_400_BAD_REQUEST - ) - - membership, created = OrganizationMembership.objects.get_or_create( - organization=invite.organization, - user=request.user, - defaults={'role': OrganizationMembership.Role.EMPLOYEE} - ) - - if created: - invite.used_by = request.user - invite.used_at = timezone.now() - invite.is_active = False - invite.save() - - serializer = OrganizationSerializer(invite.organization) - return Response(serializer.data, status=status.HTTP_201_CREATED if created else status.HTTP_200_OK) - - -class DomainViewSet(ModelViewSet): - queryset = Domain.objects.all() - serializer_class = DomainSerializer - permission_classes = [IsAuthenticatedOrReadOnly] - lookup_field = 'uuid' - - def get_queryset(self): - user = self.request.user - if user.is_authenticated: - return Domain.objects.filter( - organization__memberships__user=user - ).distinct() - return Domain.objects.none() - - -class DatasetViewSet(ModelViewSet): - queryset = Dataset.objects.all() - serializer_class = DatasetSerializer - permission_classes = [IsAuthenticatedOrReadOnly] - lookup_field = 'uuid' - diff --git a/apps/users/__init__.py b/apps/users/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/users/admin.py b/apps/users/admin.py deleted file mode 100644 index c914d25..0000000 --- a/apps/users/admin.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.contrib import admin -from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin -from django.contrib.auth.models import Group -from apps.users.models import User - -admin.site.unregister(Group) - -@admin.register(User) -class UserAdmin(DjangoUserAdmin): - fieldsets = ( - (None, {'fields': ('email_address', 'password')}), - ('Personal info', {'fields': ('first_name', 'last_name')}), - ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'role')}), - ('Dates', {'fields': ('last_login',)}), - ) - - add_fieldsets = ( - (None, { - 'classes': ('wide',), - 'fields': ('email_address', 'first_name', 'last_name', 'password1', 'password2'), - }), - ) - - list_display = ('email_address', 'first_name', 'last_name', 'is_staff') - search_fields = ('email_address', 'first_name', 'last_name') - ordering = ('email_address',) diff --git a/apps/users/apps.py b/apps/users/apps.py deleted file mode 100644 index 7f2dacd..0000000 --- a/apps/users/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - -class UsersConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'apps.users' diff --git a/apps/users/managers.py b/apps/users/managers.py deleted file mode 100644 index a3760f4..0000000 --- a/apps/users/managers.py +++ /dev/null @@ -1,27 +0,0 @@ -from django.contrib.auth.hashers import make_password -from django.contrib.auth.models import BaseUserManager -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from apps.users.models import User - -class UserManager(BaseUserManager["User"]): - - def _create_user(self, email_address: str, password: str | None, **extra_fields): - if not email_address: - raise ValueError("The given email must be set") - email_address = self.normalize_email(email_address) - user: User = self.model(email_address=email_address, **extra_fields) - user.password = make_password(password) - user.save(using=self._db) - return user - - def create_user(self, email_address: str, password: str | None = None, **extra_fields): - extra_fields.setdefault("is_staff", False) - return self._create_user(email_address, password, **extra_fields) - - def create_superuser(self, email_address: str, password: str | None = None, **extra_fields): - extra_fields.setdefault("is_staff", True) - if extra_fields.get("is_staff") is not True: - raise ValueError("Superuser must have is_staff=True.") - return self._create_user(email_address, password, **extra_fields) diff --git a/apps/users/migrations/0001_initial.py b/apps/users/migrations/0001_initial.py deleted file mode 100644 index 8db7b58..0000000 --- a/apps/users/migrations/0001_initial.py +++ /dev/null @@ -1,44 +0,0 @@ -# Generated by Django 5.2.8 on 2025-12-06 21:33 - -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ] - - operations = [ - migrations.CreateModel( - name='User', - fields=[ - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), - ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), - ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='User ID')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, verbose_name='User UUID')), - ('email_address', models.EmailField(max_length=255, unique=True, verbose_name='Email Address')), - ('first_name', models.CharField(max_length=255, verbose_name='First Name')), - ('last_name', models.CharField(max_length=255, verbose_name='Last Name')), - ('date_of_birth', models.DateField(blank=True, null=True, verbose_name='Date of Birth')), - ('bio', models.TextField(blank=True, default='')), - ('timezone', models.CharField(blank=True, default='UTC', max_length=16)), - ('avatar_url', models.URLField(blank=True)), - ('is_active', models.BooleanField(default=True, verbose_name='Account Active')), - ('is_staff', models.BooleanField(default=False, verbose_name='Account Admin')), - ('role', models.CharField(choices=[('manager', 'Manager'), ('employee', 'Employee')], default='employee', max_length=50, verbose_name='Role')), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'User', - 'verbose_name_plural': 'Users', - }, - ), - ] diff --git a/apps/users/migrations/__init__.py b/apps/users/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/users/models.py b/apps/users/models.py deleted file mode 100644 index b659710..0000000 --- a/apps/users/models.py +++ /dev/null @@ -1,76 +0,0 @@ -from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin -from django.db.models import ( - AutoField, - BooleanField, - CharField, - DateField, - DateTimeField, - EmailField, - UUIDField, - Model, - TextChoices, - TextField, - URLField, -) -from django.utils.translation import gettext_lazy as _ -from typing import ClassVar -from uuid import uuid4 -from apps.users.managers import UserManager -from django.conf import settings - - -class TimeStampMixin(Model): - - created_at = DateTimeField(verbose_name="Created At", auto_now_add=True) - updated_at = DateTimeField(verbose_name="Updated At", auto_now=True) - - class Meta: - abstract = True - - -class User(AbstractBaseUser, TimeStampMixin, PermissionsMixin): - - class Roles(TextChoices): - MANAGER = 'manager', _("Manager") - EMPLOYEE = 'employee', _("Employee") - - id = AutoField(verbose_name = _("User ID"), primary_key = True) - uuid = UUIDField(verbose_name = _("User UUID"), default = uuid4, editable = False) - - email_address = EmailField(verbose_name = _("Email Address"), max_length = 255, unique = True) - first_name = CharField(verbose_name = _("First Name"), max_length = 255) - last_name = CharField(verbose_name = _("Last Name"), max_length = 255) - date_of_birth = DateField(verbose_name = _("Date of Birth"), null = True, blank = True) - - bio = TextField(default = "", blank = True) - timezone = CharField(default = settings.TIME_ZONE, max_length = 16, blank = True) - avatar_url = URLField(blank = True) - - is_active = BooleanField(verbose_name = _("Account Active"), default = True) - is_staff = BooleanField(verbose_name = _("Account Admin"), default = False) - - role = CharField(verbose_name = _("Role"), max_length = 50, choices = Roles.choices, default = Roles.EMPLOYEE) - - USERNAME_FIELD = 'email_address' - EMAIL_FIELD = 'email_address' - REQUIRED_FIELDS = ['first_name', 'last_name', 'date_of_birth'] - - objects: ClassVar[UserManager] = UserManager() - - def has_perm(self, perm, obj=None): - return True - - def has_module_perms(self, app_label): - return True - - class Meta: - verbose_name = _('User') - verbose_name_plural = _('Users') - - @property - def full_name(self): - return f"{self.first_name} {self.last_name}" - - def __str__(self): - return self.full_name - diff --git a/apps/users/serializers.py b/apps/users/serializers.py deleted file mode 100644 index 802c3c6..0000000 --- a/apps/users/serializers.py +++ /dev/null @@ -1,8 +0,0 @@ -from rest_framework import serializers -from apps.users.models import User - -class UserSerializer(serializers.ModelSerializer): - - class Meta: - model = User - fields = ['id', 'uuid', 'email_address', 'first_name', 'last_name', 'bio', 'timezone', 'avatar_url', 'role', 'date_of_birth', 'created_at', 'updated_at'] diff --git a/apps/users/tests/__init__.py b/apps/users/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/apps/users/tests/test_api_list.py b/apps/users/tests/test_api_list.py deleted file mode 100644 index 4f491c9..0000000 --- a/apps/users/tests/test_api_list.py +++ /dev/null @@ -1,57 +0,0 @@ -from django.test import TestCase -from django.contrib.auth import get_user_model -from rest_framework.test import APIClient -from rest_framework import status - - -User = get_user_model() - - -class UserListAPITests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user = User.objects.create_user( - password='pass1234', - email_address='apiuser@example.com', - first_name='API', - last_name='User', - date_of_birth='1995-05-05', - ) - - def test_list_users(self): - url = '/api/user/' - resp = self.client.get(url) - self.assertEqual(resp.status_code, status.HTTP_200_OK) - data = resp.json() - self.assertIsInstance(data, (list, dict)) - - def test_api_response_contains_expected_fields(self): - url = '/api/user/' - resp = self.client.get(url) - self.assertEqual(resp.status_code, status.HTTP_200_OK) - data = resp.json() - - if isinstance(data, dict) and 'results' in data: - users = data['results'] - else: - users = data - - self.assertTrue(len(users) >= 1) - sample = users[0] - expected_keys = {'id', 'uuid', 'email_address', 'first_name', 'last_name', 'bio', 'timezone', 'avatar_url'} - self.assertTrue(expected_keys.issubset(set(sample.keys()))) - - def test_retrieve_user_by_uuid(self): - url = f'/api/user/{self.user.uuid}/' - resp = self.client.get(url) - self.assertEqual(resp.status_code, status.HTTP_200_OK) - data = resp.json() - self.assertEqual(data['email_address'], 'apiuser@example.com') - - def test_retrieve_user_not_found(self): - import uuid - fake_uuid = uuid.uuid4() - url = f'/api/user/{fake_uuid}/' - resp = self.client.get(url) - self.assertEqual(resp.status_code, status.HTTP_404_NOT_FOUND) diff --git a/apps/users/tests/test_auth_actions.py b/apps/users/tests/test_auth_actions.py deleted file mode 100644 index 816f827..0000000 --- a/apps/users/tests/test_auth_actions.py +++ /dev/null @@ -1,641 +0,0 @@ -from django.test import TestCase -from django.contrib.auth import get_user_model -from rest_framework.test import APIClient -from rest_framework import status - - -User = get_user_model() - - -class UserLoginActionTests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user_data = { - 'email_address': 'testuser@example.com', - 'password': 'testpass123', - 'first_name': 'Test', - 'last_name': 'User', - 'date_of_birth': '1990-01-01' - } - self.user = User.objects.create_user(**self.user_data) - - def test_login_successful(self): - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertTrue(data['success']) - self.assertEqual(data['message'], 'Login successful') - self.assertIn('user', data) - self.assertEqual(data['user']['email_address'], 'testuser@example.com') - - def test_login_missing_email(self): - response = self.client.post('/api/user/login/', { - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertIn('error', data) - - def test_login_missing_password(self): - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertIn('error', data) - - def test_login_invalid_credentials(self): - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'wrongpassword' - }) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_login_nonexistent_user(self): - response = self.client.post('/api/user/login/', { - 'email_address': 'nonexistent@example.com', - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_login_session_created(self): - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertIn('sessionid', self.client.cookies) - - def test_login_inactive_user(self): - self.user.is_active = False - self.user.save() - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_login_case_insensitive_email(self): - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@EXAMPLE.COM', - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - -class UserLogoutActionTests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user = User.objects.create_user( - email_address='testuser@example.com', - password='testpass123', - first_name='Test', - last_name='User' - ) - - def test_logout_successful(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/logout/') - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertTrue(data['success']) - - def test_logout_without_login(self): - response = self.client.post('/api/user/logout/') - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_session_destroyed_after_logout(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - self.client.post('/api/user/logout/') - response = self.client.get('/api/user/me/') - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - -class UserMeActionTests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user = User.objects.create_user( - email_address='testuser@example.com', - password='testpass123', - first_name='Test', - last_name='User' - ) - - def test_me_authenticated(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.get('/api/user/me/') - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertTrue(data['success']) - self.assertEqual(data['email_address'], 'testuser@example.com') - - def test_me_unauthenticated(self): - response = self.client.get('/api/user/me/') - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_me_returns_correct_user_data(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.get('/api/user/me/') - data = response.json() - expected_fields = {'id', 'uuid', 'email_address', 'first_name', 'last_name'} - self.assertTrue(expected_fields.issubset(set(data.keys()))) - - -class UserSessionActionTests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user = User.objects.create_user( - email_address='testuser@example.com', - password='testpass123', - first_name='Test', - last_name='User' - ) - - def test_session_authenticated(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.get('/api/user/session/') - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertTrue(data['isAuthenticated']) - - def test_session_unauthenticated(self): - response = self.client.get('/api/user/session/') - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertFalse(data['isAuthenticated']) - - def test_session_staff_status(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.get('/api/user/session/') - data = response.json() - self.assertIn('isStaff', data) - self.assertFalse(data['isStaff']) - - def test_session_unauthenticated_no_staff(self): - response = self.client.get('/api/user/session/') - data = response.json() - self.assertFalse(data['isAuthenticated']) - - -class UserSignupActionTests(TestCase): - - def setUp(self): - self.client = APIClient() - - def test_signup_successful(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'newuser@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'New', - 'last_name': 'User', - 'date_of_birth': '1995-05-05' - }) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - data = response.json() - self.assertTrue(data['success']) - self.assertIn('User account created successfully', data['detail']) - self.assertTrue(User.objects.filter(email_address='newuser@example.com').exists()) - - def test_signup_email_exists(self): - User.objects.create_user( - email_address='existing@example.com', - password='pass', - first_name='Existing', - last_name='User' - ) - response = self.client.post('/api/user/signup/', { - 'email_address': 'existing@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'New', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertFalse(data['success']) - self.assertIn('Email address already exists', data['detail']) - - def test_signup_missing_first_name(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'newuser2@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertFalse(data['success']) - - def test_signup_missing_last_name(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'newuser3@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'New' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertFalse(data['success']) - - def test_signup_passwords_mismatch(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'newuser4@example.com', - 'password': 'newpass123', - 'confirm_password': 'differentpass', - 'first_name': 'New', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertIn('Passwords do not match', data['detail']) - - def test_signup_missing_email(self): - response = self.client.post('/api/user/signup/', { - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'New', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_signup_missing_password(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'newuser@example.com', - 'confirm_password': 'newpass123', - 'first_name': 'New', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_signup_empty_data(self): - response = self.client.post('/api/user/signup/', {}) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_signup_case_insensitive_email(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'NewUser@EXAMPLE.COM', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'New', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - user = User.objects.get(email_address='NewUser@example.com') - self.assertEqual(user.email_address, 'NewUser@example.com') - - def test_signup_duplicate_case_insensitive(self): - User.objects.create_user( - email_address='test@example.com', - password='pass', - first_name='Test', - last_name='User' - ) - response = self.client.post('/api/user/signup/', { - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'New', - 'last_name': 'User' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - -class UserChangePasswordActionTests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user = User.objects.create_user( - email_address='testuser@example.com', - password='testpass123', - first_name='Test', - last_name='User' - ) - - def test_change_password_successful(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'password': 'newpass456', - 'confirm_password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertTrue(data['success']) - self.user.refresh_from_db() - self.assertTrue(self.user.check_password('newpass456')) - - def test_change_password_wrong_old_password(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': 'wrongoldpass', - 'password': 'newpass456', - 'confirm_password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - data = response.json() - self.assertFalse(data['success']) - - def test_change_password_mismatch(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'password': 'newpass456', - 'confirm_password': 'differentpass' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertIn('Passwords do not match', data['detail']) - - def test_change_password_missing_old_password(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'password': 'newpass456', - 'confirm_password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - data = response.json() - self.assertIn('old_password', data['detail']) - - def test_change_password_missing_new_password(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'confirm_password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_change_password_unauthenticated(self): - response = self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'password': 'newpass456', - 'confirm_password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_change_password_empty_old_password(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': '', - 'password': 'newpass456', - 'confirm_password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_can_login_with_new_password_after_change(self): - self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'testpass123' - }) - self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'password': 'brandnewpass789', - 'confirm_password': 'brandnewpass789' - }) - self.client.logout() - response = self.client.post('/api/user/login/', { - 'email_address': 'testuser@example.com', - 'password': 'brandnewpass789' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - -class UserEdgeCaseTests(TestCase): - - def setUp(self): - self.client = APIClient() - self.user = User.objects.create_user( - email_address='edgecase@example.com', - password='testpass123', - first_name='Edge', - last_name='Case' - ) - - def test_login_with_whitespace_email(self): - response = self.client.post('/api/user/login/', { - 'email_address': ' testuser@example.com ', - 'password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - - def test_signup_with_very_long_name(self): - long_name = 'A' * 255 - response = self.client.post('/api/user/signup/', { - 'email_address': 'longname@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': long_name, - 'last_name': long_name - }) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - def test_signup_with_too_long_name(self): - too_long_name = 'A' * 256 - response = self.client.post('/api/user/signup/', { - 'email_address': 'verylongname@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': too_long_name, - 'last_name': 'User' - }) - self.assertIn(response.status_code, [status.HTTP_400_BAD_REQUEST, status.HTTP_201_CREATED]) - - def test_signup_with_special_characters_in_name(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'special@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'José', - 'last_name': "O'Brien-Smith" - }) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - def test_change_password_same_as_old(self): - self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'password': 'testpass123', - 'confirm_password': 'testpass123' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - - def test_signup_missing_confirm_password_field(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'missingconfirm@example.com', - 'password': 'newpass123', - 'first_name': 'Missing', - 'last_name': 'Confirm' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_login_multiple_times_same_session(self): - response1 = self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - session_id_1 = self.client.cookies.get('sessionid') - - me1 = self.client.get('/api/user/me/') - self.assertEqual(me1.status_code, status.HTTP_200_OK) - - response2 = self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - session_id_2 = self.client.cookies.get('sessionid') - self.assertEqual(response1.status_code, status.HTTP_200_OK) - self.assertEqual(response2.status_code, status.HTTP_200_OK) - - def test_staff_user_login_shows_staff_status(self): - staff_user = User.objects.create_user( - email_address='staff@example.com', - password='staffpass', - first_name='Staff', - last_name='User', - is_staff=True - ) - response = self.client.post('/api/user/login/', { - 'email_address': 'staff@example.com', - 'password': 'staffpass' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertIn('user', data) - - def test_session_status_after_explicit_logout(self): - self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - self.client.post('/api/user/logout/') - - response = self.client.get('/api/user/session/') - data = response.json() - self.assertFalse(data['isAuthenticated']) - - def test_signup_with_null_optional_fields(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'optional@example.com', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'Optional', - 'last_name': 'Fields' - }) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - def test_change_password_with_missing_confirm_password(self): - self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - response = self.client.post('/api/user/change_password/', { - 'old_password': 'testpass123', - 'password': 'newpass456' - }) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - - def test_login_and_logout_sequence(self): - resp1 = self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - self.assertEqual(resp1.status_code, status.HTTP_200_OK) - - me1 = self.client.get('/api/user/me/') - self.assertEqual(me1.status_code, status.HTTP_200_OK) - - logout_resp = self.client.post('/api/user/logout/') - self.assertEqual(logout_resp.status_code, status.HTTP_200_OK) - - me2 = self.client.get('/api/user/me/') - self.assertEqual(me2.status_code, status.HTTP_403_FORBIDDEN) - - resp2 = self.client.post('/api/user/login/', { - 'email_address': 'edgecase@example.com', - 'password': 'testpass123' - }) - self.assertEqual(resp2.status_code, status.HTTP_200_OK) - - me3 = self.client.get('/api/user/me/') - self.assertEqual(me3.status_code, status.HTTP_200_OK) - - def test_invalid_email_format(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'not-an-email', - 'password': 'newpass123', - 'confirm_password': 'newpass123', - 'first_name': 'Invalid', - 'last_name': 'Email' - }) - self.assertIn(response.status_code, [status.HTTP_400_BAD_REQUEST, status.HTTP_201_CREATED]) - - def test_empty_password_signup(self): - response = self.client.post('/api/user/signup/', { - 'email_address': 'emptypass@example.com', - 'password': '', - 'confirm_password': '', - 'first_name': 'Empty', - 'last_name': 'Pass' - }) - self.assertIn(response.status_code, [status.HTTP_400_BAD_REQUEST, status.HTTP_201_CREATED]) - - def test_role_preserved_after_login(self): - _ = User.objects.create_user( - email_address='manager@example.com', - password='managerpass', - first_name='Manager', - last_name='User', - role=User.Roles.MANAGER - ) - response = self.client.post('/api/user/login/', { - 'email_address': 'manager@example.com', - 'password': 'managerpass' - }) - self.assertEqual(response.status_code, status.HTTP_200_OK) - data = response.json() - self.assertEqual(data['user']['role'], User.Roles.MANAGER) diff --git a/apps/users/tests/test_models.py b/apps/users/tests/test_models.py deleted file mode 100644 index ad1ebe3..0000000 --- a/apps/users/tests/test_models.py +++ /dev/null @@ -1,121 +0,0 @@ -from django.test import TestCase -from django.contrib.auth import get_user_model -from django.db import IntegrityError -from django.conf import settings -import uuid - - -User = get_user_model() - - -class UserModelTests(TestCase): - - def setUp(self): - self.user_data = { - 'email_address': 'Test@Example.com', - 'first_name': 'Test', - 'last_name': 'User', - 'date_of_birth': '1990-01-01', - } - - def test_create_user_and_properties(self): - user = User.objects.create_user(password='pass1234', **self.user_data) - self.assertIsNotNone(user.pk) - self.assertEqual(user.email_address, 'Test@example.com') - self.assertEqual(user.full_name, 'Test User') - - def test_create_superuser(self): - su = User.objects.create_superuser(password='adminpass', **self.user_data) - self.assertTrue(su.is_staff) - self.assertIsNotNone(su.pk) - self.assertTrue(su.is_active) - - def test_password_hashed_and_check(self): - user = User.objects.create_user(email_address='hashme@example.com', password='secret123') - self.assertNotEqual(user.password, 'secret123') - self.assertTrue(user.check_password('secret123')) - - def test_uuid_and_id_auto_populated(self): - u1 = User.objects.create_user(email_address='one@example.com', password='p') - u2 = User.objects.create_user(email_address='two@example.com', password='p') - self.assertIsNotNone(u1.uuid) - self.assertIsInstance(u1.uuid, uuid.UUID) - self.assertNotEqual(u1.uuid, u2.uuid) - self.assertIsNotNone(u1.id) - self.assertIsNotNone(u2.id) - - def test_default_fields(self): - u = User.objects.create_user(email_address='defaults@example.com', password='p') - self.assertEqual(u.bio, "") - self.assertEqual(u.timezone, settings.TIME_ZONE) - self.assertEqual(u.avatar_url, "") - self.assertTrue(u.is_active) - self.assertFalse(u.is_staff) - - def test_unique_email_constraint(self): - User.objects.create_user(email_address='dup@example.com', password='p') - with self.assertRaises(IntegrityError): - User.objects.create_user(email_address='dup@example.com', password='p') - - def test_create_user_without_email_raises(self): - with self.assertRaises(ValueError): - User.objects.create_user(email_address='', password='p') - - def test_date_of_birth_optional(self): - u = User.objects.create_user(email_address='nodob@example.com', password='p') - self.assertIsNone(u.date_of_birth) - - def test_str_and_full_name(self): - u = User.objects.create_user( - email_address='name@example.com', - password='p', - first_name='A', - last_name='B' - ) - self.assertEqual(u.full_name, 'A B') - self.assertEqual(str(u), 'A B') - - def test_email_normalization_domain_lowercase(self): - user1 = User.objects.create_user(email_address='Test@EXAMPLE.COM', password='p') - self.assertEqual(user1.email_address, 'Test@example.com') - user2 = User.objects.create_user(email_address='test@EXAMPLE.COM', password='p2') - self.assertEqual(user2.email_address, 'test@example.com') - self.assertNotEqual(user1.email_address, user2.email_address) - - def test_superuser_must_have_is_staff(self): - with self.assertRaises(ValueError): - User.objects.create_superuser( - email_address='fail@example.com', - password='p', - is_staff=False - ) - - def test_role_default_is_employee(self): - u = User.objects.create_user(email_address='role@example.com', password='p') - self.assertEqual(u.role, User.Roles.EMPLOYEE) - - def test_role_choices(self): - u = User.objects.create_user( - email_address='manager@example.com', - password='p', - role=User.Roles.MANAGER - ) - self.assertEqual(u.role, User.Roles.MANAGER) - - def test_timestamps_auto_set(self): - from datetime import timedelta - u = User.objects.create_user(email_address='timestamps@example.com', password='p') - self.assertIsNotNone(u.created_at) - self.assertIsNotNone(u.updated_at) - time_diff = abs((u.updated_at - u.created_at).total_seconds()) - self.assertLess(time_diff, 1.0) - - def test_has_perm_returns_true(self): - u = User.objects.create_user(email_address='perm@example.com', password='p') - self.assertTrue(u.has_perm('any.permission')) - self.assertTrue(u.has_perm('another.permission', obj=None)) - - def test_has_module_perms_returns_true(self): - u = User.objects.create_user(email_address='modperm@example.com', password='p') - self.assertTrue(u.has_module_perms('auth')) - self.assertTrue(u.has_module_perms('users')) diff --git a/apps/users/viewsets.py b/apps/users/viewsets.py deleted file mode 100644 index 40e8ccd..0000000 --- a/apps/users/viewsets.py +++ /dev/null @@ -1,149 +0,0 @@ -from rest_framework import viewsets, status -from rest_framework.decorators import action -from rest_framework.response import Response -from rest_framework.permissions import IsAuthenticatedOrReadOnly, AllowAny, IsAuthenticated -from django.contrib.auth import authenticate, login, logout -from apps.users.models import User -from apps.users.serializers import UserSerializer - -class UserViewSet(viewsets.ReadOnlyModelViewSet): - - queryset = User.objects.all() - serializer_class = UserSerializer - permission_classes = [IsAuthenticatedOrReadOnly] - lookup_field = 'uuid' - - @action(detail=False, methods=['post'], permission_classes=[AllowAny]) - def login(self, request): - email_address = request.data.get('email_address') - password = request.data.get('password') - - if not email_address or not password: - return Response( - {'error': 'Email and password are required'}, - status=status.HTTP_400_BAD_REQUEST - ) - email_address = User.objects.normalize_email(email_address) - user = authenticate(request, username=email_address, password=password) - - if user is None: - return Response( - {'error': 'Invalid credentials'}, - status=status.HTTP_401_UNAUTHORIZED - ) - - login(request, user) - return Response({ - 'user': UserSerializer(user).data, - 'message': 'Login successful', - 'success': True - }, status=status.HTTP_200_OK) - - @action(detail=False, methods=['post'], permission_classes=[IsAuthenticated]) - def logout(self, request): - logout(request) - return Response( - {'message': 'Logout successful', 'success': True}, - status=status.HTTP_200_OK - ) - - @action(detail=False, methods=['get'], permission_classes=[IsAuthenticated]) - def me(self, request): - user_data = UserSerializer(request.user).data - user_data['success'] = True - return Response(user_data) - - @action(detail=False, methods=['get'], permission_classes=[AllowAny]) - def session(self, request): - return Response({ - 'isAuthenticated': request.user.is_authenticated, - 'isStaff': request.user.is_staff if request.user.is_authenticated else False - }) - - @action(detail=False, methods=['post'], permission_classes=[AllowAny]) - def signup(self, request): - try: - data = request.data - except: - return Response( - {'detail': 'Invalid data provided.', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - email_address = data.get('email_address') - if not email_address: - return Response( - {'detail': 'Email address is required.', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - # Normalize email - email_address = User.objects.normalize_email(email_address) - - if User.objects.filter(email_address=email_address).exists(): - return Response( - {'detail': 'Email address already exists.', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - if not data.get('first_name') or not data.get('last_name'): - return Response( - {'detail': 'First and last name(s) must be provided.', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - if data.get('password') != data.get('confirm_password'): - return Response( - {'detail': 'Passwords do not match.', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - try: - user = User.objects.create_user( - email_address=email_address, - password=data.get('password'), - first_name=data.get('first_name'), - last_name=data.get('last_name'), - date_of_birth=data.get('date_of_birth') - ) - return Response( - {'detail': 'User account created successfully.', 'success': True}, - status=status.HTTP_201_CREATED - ) - except Exception as e: - return Response( - {'detail': str(e), 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - @action(detail=False, methods=['post'], permission_classes=[IsAuthenticated]) - def change_password(self, request): - data = request.data - required_fields = ['old_password', 'password', 'confirm_password'] - - for field in required_fields: - if not data.get(field): - return Response( - {'detail': f'"{field}" not provided', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - if data.get('password') != data.get('confirm_password'): - return Response( - {'detail': 'Passwords do not match', 'success': False}, - status=status.HTTP_400_BAD_REQUEST - ) - - user = request.user - if not user.check_password(data.get('old_password')): - return Response( - {'detail': 'Old password is incorrect', 'success': False}, - status=status.HTTP_401_UNAUTHORIZED - ) - - user.set_password(data.get('password')) - user.save() - return Response( - {'detail': 'Password changed successfully', 'success': True}, - status=status.HTTP_200_OK - ) diff --git a/compose/dev/celery/Dockerfile b/compose/dev/celery/Dockerfile deleted file mode 100644 index aa0f7ba..0000000 --- a/compose/dev/celery/Dockerfile +++ /dev/null @@ -1,19 +0,0 @@ -FROM python:3.12-bookworm - -RUN apt-get update && apt-get install --no-install-recommends -y \ - build-essential \ - libpq-dev \ - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* - -ENV VIRTUAL_ENV=/venv \ - PATH=/venv/bin:$PATH - -RUN python -m venv /venv - -WORKDIR /app - -COPY requirements/base.txt . -RUN pip install --no-cache-dir --requirement base.txt - -CMD ["celery", "-A", "config", "worker", "-l", "info"] diff --git a/compose/dev/docker-compose.yml b/compose/dev/docker-compose.yml deleted file mode 100644 index 600b1c7..0000000 --- a/compose/dev/docker-compose.yml +++ /dev/null @@ -1,127 +0,0 @@ - -services: - - fyp-postgres: - image: postgres:15-alpine - container_name: ${POSTGRES_CONTAINER_NAME:-fyp-postgres} - env_file: - - ../../.env - environment: - POSTGRES_HOST_AUTH_METHOD: trust - volumes: - - postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-fyp}"] - interval: 5s - timeout: 3s - retries: 5 - - fyp-redis: - image: redis:7-alpine - container_name: ${REDIS_CONTAINER_NAME:-fyp-redis} - ports: - - "0.0.0.0:6379:6379" - volumes: - - redis_data:/data - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 5s - timeout: 3s - retries: 5 - - web: - build: - context: ../.. - dockerfile: compose/dev/node/Dockerfile - environment: - NODE_ENV: development - CHOKIDAR_USEPOLLING: "true" - stdin_open: true - ports: - - "0.0.0.0:5173:5173" - volumes: - - ../../src:/app/src:delegated - - ../../index.html:/app/index.html:delegated - - ../../vite.config.ts:/app/vite.config.ts:delegated - - ../../tsconfig.json:/app/tsconfig.json:delegated - - ../../build:/app/build:delegated - - /app/node_modules - - api: - build: - context: ../.. - dockerfile: compose/dev/python/Dockerfile - container_name: dynavera-api - ports: - - "0.0.0.0:8000:8000" - volumes: - - ../../:/app - environment: - DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-secret-key-change-in-production} - DJANGO_DEBUG: "true" - DJANGO_ALLOWED_HOSTS: "*" - DJANGO_CELERY_BROKER_URL: redis://${REDIS_CONTAINER_NAME:-fyp-redis}:6379/0 - DJANGO_CORS_ALLOWED_ORIGINS: http://localhost:5173,http://127.0.0.1:5173 - DJANGO_SETTINGS_MODULE: config.settings - env_file: - - ../../.env - depends_on: - fyp-redis: - condition: service_healthy - fyp-postgres: - condition: service_healthy - web: - condition: service_started - mcp-agent-server: - condition: service_started - - celery: - build: - context: ../.. - dockerfile: compose/dev/celery/Dockerfile - container_name: dynavera-celery - volumes: - - ../../:/app - - ${USERPROFILE}/.cache/gpt4all:/root/.cache/gpt4all:rw - environment: - DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-secret-key-change-in-production} - DJANGO_CELERY_BROKER_URL: redis://${REDIS_CONTAINER_NAME:-fyp-redis}:6379/0 - DJANGO_SETTINGS_MODULE: config.settings - env_file: - - ../../.env - depends_on: - fyp-redis: - condition: service_healthy - fyp-postgres: - condition: service_healthy - mcp-agent-server: - condition: service_started - - mcp-agent-server: - build: - context: ../.. - dockerfile: compose/dev/mcp/Dockerfile - container_name: dynavera-mcp-agent - ports: - - "0.0.0.0:8001:8001" - volumes: - - ../../:/app - - ${USERPROFILE}/.cache/gpt4all:/root/.cache/gpt4all:rw - - ../../build/rag_db:/app/build/rag_db:ro - environment: - DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:-dev-secret-key-change-in-production} - DJANGO_SETTINGS_MODULE: config.settings - PYTHONUNBUFFERED: "1" - HOME: /root - env_file: - - ../../.env - depends_on: - fyp-redis: - condition: service_healthy - fyp-postgres: - condition: service_healthy - -volumes: - redis_data: - venv: - postgres_data: diff --git a/compose/dev/mcp/Dockerfile b/compose/dev/mcp/Dockerfile deleted file mode 100644 index ff4b9bc..0000000 --- a/compose/dev/mcp/Dockerfile +++ /dev/null @@ -1,46 +0,0 @@ -FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04 - -WORKDIR /app - -RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ - python3 \ - python3-pip \ - build-essential \ - git \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* \ - && ln -sf /usr/bin/python3 /usr/bin/python \ - && ln -sf /usr/bin/pip3 /usr/bin/pip - -COPY requirements/base.txt requirements/base.txt - -RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \ - apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ - python3-dev \ - libffi-dev \ - libssl-dev \ - cmake \ - pkg-config \ - && rm -rf /var/lib/apt/lists/* - -RUN pip install --no-cache-dir -r requirements/base.txt && \ - pip install --no-cache-dir mcp gpt4all sentence-transformers chromadb - -RUN if [ ! -e /usr/lib/x86_64-linux-gnu/libcudart.so.11.0 ]; then \ - found=$(ls /usr/local/cuda/lib64/libcudart.so* 2>/dev/null | head -n1 || true); \ - if [ -n "$found" ]; then \ - mkdir -p /usr/lib/x86_64-linux-gnu || true; \ - ln -sf "$found" /usr/lib/x86_64-linux-gnu/libcudart.so.11.0 || true; \ - fi; \ - fi - -COPY apps /app/apps -COPY config /app/config -COPY mcp_agent /app/mcp_agent -COPY manage.py /app/ - -ENV PYTHONUNBUFFERED=1 -ENV DJANGO_SETTINGS_MODULE=config.settings -EXPOSE 8001 - -CMD ["python", "-m", "mcp_agent.mcp_server"] diff --git a/compose/dev/node/Dockerfile b/compose/dev/node/Dockerfile deleted file mode 100644 index 29dab4d..0000000 --- a/compose/dev/node/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM node:22-bullseye - -WORKDIR /app - -COPY package*.json ./ -RUN npm ci && npm cache clean --force - -COPY src ./src -COPY index.html . -COPY vite.config.* . -COPY tsconfig.* . - -EXPOSE 5173 - -CMD ["sh", "-c", "npm run dev -- --host 0.0.0.0 & npm run build -- --watch"] \ No newline at end of file diff --git a/compose/dev/python/Dockerfile b/compose/dev/python/Dockerfile deleted file mode 100644 index a018e04..0000000 --- a/compose/dev/python/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM python:3.12-bookworm - -RUN apt-get update && apt-get install --no-install-recommends -y \ - build-essential \ - libpq-dev \ - wait-for-it \ - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* - -ENV VIRTUAL_ENV=/venv \ - PATH=/venv/bin:$PATH - -RUN python -m venv /venv - -WORKDIR /app - -COPY requirements/base.txt . -RUN pip install --no-cache-dir --requirement base.txt - -COPY ./compose/prod/start /start -RUN sed -i 's/\r$//g' /start && chmod +x /start - -CMD ["/start"] \ No newline at end of file diff --git a/compose/prod/celery/Dockerfile b/compose/prod/celery/Dockerfile deleted file mode 100644 index e416285..0000000 --- a/compose/prod/celery/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM python:3.12.0-slim - -LABEL org.opencontainers.image.title="Dynavera Celery Worker" -LABEL org.opencontainers.image.source="https://git.cs.bham.ac.uk/projects-2025-26/vxn217" - -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 - -WORKDIR /app - -RUN apt-get update && apt-get install --no-install-recommends -y \ - build-essential \ - libpq-dev \ - && rm -rf /var/lib/apt/lists/* - -COPY requirements/* . -RUN pip install --no-cache-dir -r prod.txt - -COPY manage.py manage.py -COPY config config -COPY apps apps -COPY data data - -RUN mkdir -p /app/static - -CMD ["celery", "-A", "config.celery", "worker", "--loglevel=info"] diff --git a/compose/prod/docker-compose.local.yml b/compose/prod/docker-compose.local.yml deleted file mode 100644 index 59b4ff7..0000000 --- a/compose/prod/docker-compose.local.yml +++ /dev/null @@ -1,58 +0,0 @@ -services: - fyp-traefik: - image: traefik:v2.10 - restart: unless-stopped - command: - - "--api.insecure=true" - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - - "--entrypoints.mcp.address=:${MCP_PORT:-58001}" - ports: - - "${MCP_PORT:-58001}:${MCP_PORT:-58001}" - - "8080:8080" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock:ro" - networks: - - mcp-internal - - fyp-mcp: - build: - context: ../.. - dockerfile: compose/dev/mcp/Dockerfile - container_name: dynavera-mcp-server - restart: unless-stopped - deploy: - mode: replicated - replicas: 1 - resources: - reservations: - devices: - - driver: nvidia - count: all - capabilities: [gpu] - env_file: - - ../../.env - environment: - - MCP_HTTP_HOST=0.0.0.0 - - MCP_HTTP_PORT=8001 - - NVIDIA_VISIBLE_DEVICES=all - command: python -m mcp_agent.mcp_server - volumes: - - ../../:/app - - ${USERPROFILE}/.cache/gpt4all:/root/.cache/gpt4all:rw - - ../../build/rag_db:/app/build/rag_db - labels: - - "traefik.enable=true" - - "traefik.http.routers.fyp-mcp.rule=Host(`${MCP_DOMAIN}`)" - - "traefik.http.routers.fyp-mcp.entrypoints=mcp" - - "traefik.http.services.fyp-mcp.loadbalancer.server.port=8001" - - "com.centurylinklabs.watchtower.enable=true" - - "com.centurylinklabs.watchtower.scope=fyp" - networks: - - mcp-internal - -networks: - mcp-internal: - driver: bridge - - diff --git a/compose/prod/docker-compose.yml b/compose/prod/docker-compose.yml deleted file mode 100644 index 62692bc..0000000 --- a/compose/prod/docker-compose.yml +++ /dev/null @@ -1,111 +0,0 @@ - - -services: - - fyp-postgres: - image: postgres:15-alpine - container_name: fyp-postgres - hostname: fyp-postgres - restart: unless-stopped - env_file: - - ../../.env - environment: - POSTGRES_HOST_AUTH_METHOD: trust - volumes: - - postgres_data:/var/lib/postgresql/data - networks: - - proxy - - fyp-web: - image: ${IMAGE} - restart: unless-stopped - deploy: - mode: replicated - replicas: ${REPLICAS} - env_file: - - ../../.env - labels: - - "traefik.enable=true" - - "traefik.http.routers.fyp-web.rule=Host(`${DOMAIN}`)" - - "traefik.http.routers.fyp-web.entrypoints=${ENTRYPOINT}" - - "traefik.http.routers.fyp-web.tls.certresolver=${CERTRESOLVER}" - - "traefik.http.services.fyp-web.loadbalancer.server.port=${PORT}" - - "com.centurylinklabs.watchtower.enable=true" - - "com.centurylinklabs.watchtower.scope=fyp" - volumes: - - ../../static:/app/static - - ../../media:/app/media - networks: - - proxy - - fyp-redis: - image: redis:7-alpine - container_name: fyp-redis - restart: unless-stopped - networks: - - proxy - - fyp-celery: - build: - context: ../.. - dockerfile: compose/prod/celery/Dockerfile - image: ${CELERY_IMAGE:-fyp-celery:latest} - container_name: fyp-celery - restart: unless-stopped - env_file: - - ../../.env - depends_on: - - fyp-redis - - fyp-postgres - networks: - - proxy - volumes: - - ../../:/app - - ../../static:/app/static - - ../../media:/app/media - - fyp-watchtower: - image: containrrr/watchtower - command: - - "--scope=fyp" - - "--label-enable" - - "--interval" - - "30" - - "--rolling-restart" - environment: - - WATCHTOWER_CLEANUP=true - - REPO_USER=${GITLAB_USER} - - REPO_PASS=${GITLAB_PASS} - volumes: - - "/var/run/docker.sock:/var/run/docker.sock" - - fyp-runner: - image: gitlab/gitlab-runner:${GITLAB_RUNNER_IMAGE_TAG} - restart: unless-stopped - environment: - - CI_SERVER_URL=${GITLAB_SERVER_URL} - - REGISTRATION_TOKEN=${GITLAB_RUNNER_REGISTRATION_TOKEN} - - RUNNER_EXECUTOR=docker - - RUNNER_RUN_UNTAGGED=true - - RUNNER_TAG_LIST= - - DOCKER_TLS_CERTDIR= - - DOCKER_IMAGE=${GITLAB_RUNNER_DOCKER_IMAGE} - volumes: - - gitlab-runner-config:/etc/gitlab-runner - - gitlab-machine-config:/root/.docker/machine - - /var/run/docker.sock:/var/run/docker.sock - command: - - run - - "--working-directory=/home/gitlab-runner" - -networks: - proxy: - external: true - -volumes: - gitlab-runner-config: - name: gitlab-runner-config - gitlab-machine-config: - name: gitlab-machine-config - postgres_data: - name: fyp_postgres_data \ No newline at end of file diff --git a/compose/prod/python/Dockerfile b/compose/prod/python/Dockerfile deleted file mode 100644 index 77ca416..0000000 --- a/compose/prod/python/Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -FROM node:22-alpine AS node - -WORKDIR /app - -COPY package*.json ./ - -RUN npm ci - -COPY vite.config.ts . -COPY tsconfig.json . -COPY package*.json . -COPY src ./src -COPY index.html . - -RUN npm run build - -FROM python:3.12.0-slim AS python - -LABEL org.opencontainers.image.title="Dynavera - An Agentic Approach to Domain-Specific Trainers" -LABEL org.opencontainers.image.source="https://git.cs.bham.ac.uk/projects-2025-26/vxn217" -LABEL org.opencontainers.image.description="Dynavera (Final Year Project)" - -ENV PYTHONDONTWRITEBYTECODE=1 -ENV PYTHONUNBUFFERED=1 - -WORKDIR /app - -RUN apt-get update && apt-get install --no-install-recommends -y \ - build-essential \ - libpq-dev \ - wait-for-it \ - && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ - && rm -rf /var/lib/apt/lists/* - -COPY requirements/* . -RUN pip install --no-cache-dir -r prod.txt - -COPY manage.py manage.py -COPY config config -COPY apps apps -COPY data data - -COPY --from=node /app/build ./build - -RUN mkdir -p /app/static - -COPY ./compose/prod/start /start -RUN sed -i 's/\r$//g' /start && chmod +x /start - -ENTRYPOINT ["/start"] \ No newline at end of file diff --git a/compose/prod/start b/compose/prod/start deleted file mode 100644 index 1093810..0000000 --- a/compose/prod/start +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -set -o errexit -set -o pipefail -set -o nounset - -DB_HOST="${POSTGRES_HOST:-localhost}" -DB_PORT="${POSTGRES_PORT:-5432}" - -echo "Waiting for database at ${DB_HOST}:${DB_PORT}..." -wait-for-it ${DB_HOST}:${DB_PORT} --timeout=30 --strict || { - echo "Timed out waiting for database" >&2 - exit 1 -} - -echo "Database is available, continuing startup..." - -python manage.py makemigrations -python manage.py migrate --noinput - -for fixture in /app/data/site/*.json; do - echo "Loading fixture: $fixture" - python manage.py loaddata "$fixture" -done - -python manage.py collectstatic --noinput -exec daphne -b 0.0.0.0 -p 8000 config.asgi:application diff --git a/config/__init__.py b/config/__init__.py deleted file mode 100644 index fb989c4..0000000 --- a/config/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .celery import app as celery_app - -__all__ = ('celery_app',) diff --git a/config/__pycache__/__init__.cpython-313.pyc b/config/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index dcdc928d85fbde3094d7a9e2bf4af9680d81eb97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmey&%ge<81T9ybGF^c5V-N=hn4pZ$B0$DehG2$ZMsEf$#v&#KhG3>5=5%IFmY0k` zDNV*(%!vgBK#D6lH7B*GG9JkD(`32D2H_Sl0~Hmq0Et`d@$rc{Iq~r;89oEK47ZG( ztztrpQ;UjY@)C0rlVU>iGRuIx%#zBOvWh$-L-UyA{JgZx^qBbg%)HE!_;|g7%3B;Z mx%nxjIjMF(&6afHtkU0ea diff --git a/config/__pycache__/__init__.cpython-314.pyc b/config/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index a52b62fd664d6bdf445c4db9898c26d6fa8e05fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmdPq_I|p@<2{{|u76C9a=XP@tcj xpO==It{)$tnU`4-AFo$Xd5gm)H$SB`C)KWq6{rqmQZb0}iJ6g+v4|PS0szjS7W4oB diff --git a/config/__pycache__/settings.cpython-313.pyc b/config/__pycache__/settings.cpython-313.pyc deleted file mode 100644 index d3fe4659861e0d9bb599353c454693ebe8d8b107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6863 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 diff --git a/config/__pycache__/urls.cpython-314.pyc b/config/__pycache__/urls.cpython-314.pyc deleted file mode 100644 index 6ca439167f94dc6cc5e6f4ccaec40b025b6acd10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmb7DPixdb6rW_XZOz(N@ZzD+DLrI^+YApr#)6< zTpxq+0gaJD$7pPfjG?K_O>LW_&d^fUCOWdV(71DC9#&{AK>aU47EJA zwvpQn-$TfLHGYO8&Zfz%5TQyq!&5Gr2+jpRrIGS%`{kVClR~6UVu&82Om90SUdH8W0 zo;SgoW|hC&Di_#)a*bGFd>gm?>fLnb=l`t5nz<6{n?Ynr| zNa@#d)#LEA;4R4}cTkD)&uk|tpAitSt>oxHh3mMk?HXk_jI)G+VQI17Embag?yi)} zK>(`}1m#-82AWVJnFzheWp9C^fZqs}mP`~aEzP;?EzI!?y4IUt-XikPtU`_fkKBRRWydg#D|6kjeqv;7eMcKtOQ?I})1A+I7yh|_v46h*&Dy@~ MnCs@pp6J1iUyQRMkN^Mx diff --git a/config/__pycache__/wsgi.cpython-314.pyc b/config/__pycache__/wsgi.cpython-314.pyc deleted file mode 100644 index ec4a766406f5c1761103c369bfa5042e7b713c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmYjP%Wl*#6t$CqsXXd{fOdt1d2B{NTu|8{gjCcr1i`e*6tRMgn|Ly=96O5LDeVf_ z@CAGXKfresfk5&KgxG`T2XH2h+Pm;Q*Y|Obu6?t+h=8-<=ga&f1mJfSG}bx>v($mN zAOZ%w1`!OQfzErO_ry2;74QmfEi^4BeyekW8x;9bYt^eG*XLgatH&vGHiFkd@66$M z^m5n_aiZjyXLzj21{S5-Wr+z83Jqp&3ZK>MhuEzZbpjX`S*M|`P^V+aA qy8s~i1Md6;-Usv!{Qyf}z|zrjaI~`a4LthQz4o.*)$', serve_frontend, {'document_root': settings.BUILD_DIR}), - *static(settings.STATIC_URL, document_root=settings.STATIC_ROOT), - *static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT), -] diff --git a/config/views.py b/config/views.py deleted file mode 100644 index a164f33..0000000 --- a/config/views.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.utils._os import safe_join -from django.views.static import serve as static_serve -from django.views.decorators.csrf import ensure_csrf_cookie -import posixpath -from pathlib import Path - -@ensure_csrf_cookie -def serve_frontend(request, path, document_root = None): - path = posixpath.normpath(path).lstrip("/") - fullpath = Path(safe_join(document_root, path)) - if fullpath.is_file(): - return static_serve(request, path, document_root) - else: - return static_serve(request, "index.html", document_root) \ No newline at end of file diff --git a/config/wsgi.py b/config/wsgi.py deleted file mode 100644 index 885c6e5..0000000 --- a/config/wsgi.py +++ /dev/null @@ -1,5 +0,0 @@ -import os -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') -application = get_wsgi_application() diff --git a/data/site/1users.json b/data/site/1users.json deleted file mode 100644 index 9389469..0000000 --- a/data/site/1users.json +++ /dev/null @@ -1,26 +0,0 @@ -[ -{ - "model": "users.user", - "pk": 1, - "fields": { - "password": "pbkdf2_sha256$1000000$3z9wkVXkAJggKwrXvhUJJc$swijjGwX6JsYjRvuNECvPxqG8BqMydUjaz1FemMWVL8=", - "last_login": null, - "is_superuser": false, - "created_at": "2025-12-18T23:51:25.301Z", - "updated_at": "2025-12-18T23:51:25.301Z", - "uuid": "5cbef8ca-a24d-4f88-b403-0d53f6a239e6", - "email_address": "a@gmail.com", - "first_name": "a", - "last_name": "a", - "date_of_birth": "2001-01-01", - "bio": "", - "timezone": "UTC", - "avatar_url": "", - "is_active": true, - "is_staff": true, - "role": "manager", - "groups": [], - "user_permissions": [] - } -} -] diff --git a/data/site/2agents.json b/data/site/2agents.json deleted file mode 100644 index da5e2f5..0000000 --- a/data/site/2agents.json +++ /dev/null @@ -1,50 +0,0 @@ -[ -{ - "model": "agents.agent", - "pk": 1, - "fields": { - "uuid": "70ca3755-6a98-4914-9a01-75e8ee7ffd77", - "user": 1, - "name": "fnirs", - "description": "fNIRS acquisition agent", - "status": "idle", - "task_id": null, - "created_at": "2025-12-21T11:20:25.792Z", - "updated_at": "2025-12-21T11:20:25.792Z", - "started_at": null, - "completed_at": null - } -}, -{ - "model": "agents.agent", - "pk": 2, - "fields": { - "uuid": "370969d9-dc95-4410-9299-b3d8bc05beec", - "user": 1, - "name": "eeg", - "description": "EEG acquisition agent", - "status": "idle", - "task_id": null, - "created_at": "2025-12-21T11:20:25.795Z", - "updated_at": "2025-12-21T11:20:25.795Z", - "started_at": null, - "completed_at": null - } -}, -{ - "model": "agents.agent", - "pk": 3, - "fields": { - "uuid": "2654ce7a-4374-4a9a-8361-cba104b5970d", - "user": 1, - "name": "simulator", - "description": "Simulation / test agent", - "status": "idle", - "task_id": null, - "created_at": "2025-12-21T11:20:25.797Z", - "updated_at": "2025-12-21T11:20:25.797Z", - "started_at": null, - "completed_at": null - } -} -] diff --git a/documents/Features.pdf b/documents/Features.pdf deleted file mode 100644 index a9c0ece0108310d5784bb1096a846cb2deb487d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50200 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 O01h--S}A2|wEqH7>`@i~ diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 2d62887..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,56 +0,0 @@ -import vue from 'eslint-plugin-vue'; -import nx from '@nx/eslint-plugin'; - -export default [ - ...vue.configs['flat/recommended'], - ...nx.configs['flat/base'], - ...nx.configs['flat/typescript'], - ...nx.configs['flat/javascript'], - { - ignores: [ - '**/dist', - '**/build', - '**/vite.config.*.timestamp*', - '**/vitest.config.*.timestamp*' - ] - }, - { - files: ['**/*.vue'], - languageOptions: { - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module' - } - } - }, - { - files: [ - '**/*.ts', - '**/*.tsx', - '**/*.cts', - '**/*.mts', - '**/*.js', - '**/*.jsx', - '**/*.cjs', - '**/*.mjs', - '**/*.vue' - ], - rules: { - 'vue/multi-word-component-names': 'off', - '@nx/enforce-module-boundaries': [ - 'error', - { - enforceBuildableLibDependency: true, - allow: ['^.*/eslint(\\.base)?\\.config\\.[cm]?[jt]s$'], - depConstraints: [ - { - sourceTag: '*', - onlyDependOnLibsWithTags: ['*'] - } - ] - } - ] - } - } -]; diff --git a/index.html b/index.html deleted file mode 100644 index eb8ae15..0000000 --- a/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - Dynavera - - -
- - - diff --git a/manage.py b/manage.py deleted file mode 100644 index 8e7ac79..0000000 --- a/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == '__main__': - main() diff --git a/mcp_agent/__init__.py b/mcp_agent/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mcp_agent/mcp_client.py b/mcp_agent/mcp_client.py deleted file mode 100644 index 6976242..0000000 --- a/mcp_agent/mcp_client.py +++ /dev/null @@ -1,129 +0,0 @@ -import httpx -import json -from typing import Optional, Dict, Any, List -from django.conf import settings -import asyncio -import logging - -logger = logging.getLogger(__name__) - - -class MCPAgentClient: - - def __init__(self, server_url: Optional[str] = None): - self.server_url = server_url or getattr(settings, 'MCP_AGENT_URL') - self.http_client = httpx.AsyncClient( - timeout=httpx.Timeout(300.0), - follow_redirects=True - ) - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc_val, exc_tb): - if self.http_client: - await self.http_client.aclose() - - async def execute_agent( - self, - agent_id: str, - agent_name: str, - execution_id: str, - query: str, - input_data: Optional[Dict[str, Any]] = None - ) -> Dict[str, Any]: - arguments = { - "agent_id": agent_id, - "agent_name": agent_name, - "execution_id": execution_id, - "query": query, - "input_data": input_data or {} - } - - return await self._execute_via_http(arguments) - - async def _execute_via_http(self, arguments: Dict[str, Any]) -> Dict[str, Any]: - if not self.http_client: - raise RuntimeError("HTTP client not initialized") - - try: - response = await self.http_client.post( - f"{self.server_url}/execute", - json={ - "tool": "execute_agent", - "arguments": arguments - }, - headers={"Content-Type": "application/json"} - ) - response.raise_for_status() - return response.json() - - except httpx.HTTPStatusError as e: - logger.error(f"HTTP error from MCP server: {e.response.status_code} - {e.response.text}") - return { - "status": "failed", - "error": f"Server returned {e.response.status_code}", - "error_type": "HTTPError", - "details": e.response.text - } - except httpx.RequestError as e: - logger.error(f"Request error to MCP server: {e}") - return { - "status": "failed", - "error": f"Failed to connect to MCP server at {self.server_url}", - "error_type": "ConnectionError" - } - except Exception as e: - logger.error(f"Unexpected error in HTTP execution: {e}") - return { - "status": "failed", - "error": str(e), - "error_type": type(e).__name__ - } - - async def health_check(self) -> Dict[str, Any]: - try: - response = await self.http_client.get(f"{self.server_url}/health") - response.raise_for_status() - return response.json() - except Exception as e: - return {"status": "unhealthy", "error": str(e)} - - async def list_tools(self) -> List[Dict[str, Any]]: - return [ - { - "name": "execute_agent", - "description": "Execute an AI agent with given query and input data" - }, - { - "name": "health_check", - "description": "Check if the agent server is healthy" - } - ] - - async def close(self): - if self.http_client: - await self.http_client.aclose() - -_mcp_client_instance: Optional[MCPAgentClient] = None -_client_lock = asyncio.Lock() - - -async def get_mcp_client() -> MCPAgentClient: - global _mcp_client_instance - - async with _client_lock: - if _mcp_client_instance is None: - server_url = getattr(settings, 'MCP_AGENT_URL') - _mcp_client_instance = MCPAgentClient(server_url=server_url) - - return _mcp_client_instance - - -async def close_mcp_client(): - global _mcp_client_instance - - async with _client_lock: - if _mcp_client_instance is not None: - await _mcp_client_instance.close() - _mcp_client_instance = None diff --git a/mcp_agent/mcp_server.py b/mcp_agent/mcp_server.py deleted file mode 100644 index f44fde1..0000000 --- a/mcp_agent/mcp_server.py +++ /dev/null @@ -1,308 +0,0 @@ -import asyncio -import json -import os -import sys -from pathlib import Path -from aiohttp import web - -if __name__ == "__main__": - project_root = Path(__file__).resolve().parent.parent - sys.path.insert(0, str(project_root)) - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') - import django - django.setup() - -from mcp.server import Server -from mcp.types import Tool, TextContent, ImageContent, EmbeddedResource -from django.utils import timezone -from typing import Any, Dict - - -app = Server("dynavera-agent-runtime") - - -async def handle_health(request: web.Request) -> web.Response: - try: - result = await check_health() - return web.json_response(result) - except Exception as e: - return web.json_response({"status": "unhealthy", "error": str(e)}, status=500) - - -async def handle_execute(request: web.Request) -> web.Response: - try: - payload = await request.json() - tool = payload.get("tool") - arguments = payload.get("arguments", {}) or {} - if tool not in {"execute_agent", "health_check"}: - return web.json_response({"status": "failed", "error": f"Unknown tool: {tool}"}, status=400) - - if tool == "execute_agent": - result = await run_agent_execution(arguments) - else: - result = await check_health() - - return web.json_response(result) - except json.JSONDecodeError: - return web.json_response({"status": "failed", "error": "Invalid JSON payload"}, status=400) - except Exception as e: - print(f"[MCP Server] HTTP execute error: {e}") - return web.json_response({"status": "failed", "error": str(e)}, status=500) - - -@app.list_tools() -async def list_tools() -> list[Tool]: - return [ - Tool( - name="execute_agent", - description="Execute an AI agent with given query and input data. Supports RAG-enabled responses using local knowledge base.", - inputSchema={ - "type": "object", - "properties": { - "agent_id": { - "type": "string", - "description": "UUID of the agent to execute" - }, - "agent_name": { - "type": "string", - "description": "Name of the agent" - }, - "execution_id": { - "type": "string", - "description": "UUID of the execution record" - }, - "query": { - "type": "string", - "description": "User query to process" - }, - "input_data": { - "type": "object", - "description": "Additional input parameters" - } - }, - "required": ["agent_id", "agent_name", "execution_id", "query"] - } - ), - Tool( - name="health_check", - description="Check if the agent server is healthy and ready to process requests", - inputSchema={ - "type": "object", - "properties": {} - } - ) - ] - - -@app.call_tool() -async def call_tool(name: str, arguments: dict) -> list[TextContent | ImageContent | EmbeddedResource]: - if name == "execute_agent": - result = await run_agent_execution(arguments) - return [TextContent( - type="text", - text=json.dumps(result, indent=2) - )] - - elif name == "health_check": - health_info = await check_health() - return [TextContent( - type="text", - text=json.dumps(health_info, indent=2) - )] - - raise ValueError(f"Unknown tool: {name}") - - -async def check_health() -> Dict[str, Any]: - import platform - - MODEL_NAME = "Meta-Llama-3-8B-Instruct.Q4_0.gguf" - DEFAULT_MODEL_DIR = os.path.join(os.path.expanduser("~"), ".cache", "gpt4all") - MODEL_PATH = os.path.join(DEFAULT_MODEL_DIR, MODEL_NAME) - RAG_PATH = "./build/rag_db" - - return { - "status": "healthy", - "timestamp": timezone.now().isoformat(), - "platform": platform.platform(), - "python_version": platform.python_version(), - "model_available": os.path.exists(MODEL_PATH), - "model_path": MODEL_PATH, - "rag_available": os.path.exists(RAG_PATH), - "rag_path": RAG_PATH - } - - -async def run_agent_execution(arguments: dict) -> Dict[str, Any]: - agent_id = arguments["agent_id"] - agent_name = arguments["agent_name"] - execution_id = arguments["execution_id"] - query = arguments.get("query", "") - input_data = arguments.get("input_data", {}) - - print(f"[MCP Server] Executing agent {agent_name} (ID: {agent_id})") - print(f"[MCP Server] Execution ID: {execution_id}") - print(f"[MCP Server] Query: {query}") - - if not query: - return { - "status": "error", - "message": "No query provided", - "execution_id": execution_id, - "timestamp": timezone.now().isoformat() - } - - try: - from gpt4all import GPT4All - from sentence_transformers import SentenceTransformer - from chromadb import PersistentClient - - MODEL_NAME = "Meta-Llama-3-8B-Instruct.Q4_0.gguf" - EMBEDDER_NAME = "all-MiniLM-L6-v2" - RAG_PATH = "./build/rag_db" - CONTEXT_SIZE = 8192 - DEFAULT_MODEL_DIR = os.path.join(os.path.expanduser("~"), ".cache", "gpt4all") - MODEL_PATH = os.path.join(DEFAULT_MODEL_DIR, MODEL_NAME) - - print(f"[MCP Server] MODEL_PATH={MODEL_PATH}") - - # Check if model exists, fail if not - if not os.path.exists(MODEL_PATH): - error_msg = f"Model not found at {MODEL_PATH}" - print(f"[MCP Server] {error_msg}") - return { - "status": "failed", - "error": error_msg, - "error_type": "ModelNotFound", - "execution_id": execution_id, - "timestamp": timezone.now().isoformat() - } - - print("[MCP Server] Full pipeline - loading models") - events = [] - - # Initialize AI model - events.append({ - "type": "progress", - "stage": "initializing", - "message": "Initializing AI model...", - "timestamp": timezone.now().isoformat() - }) - - # RAG retrieval if available - if os.path.exists(RAG_PATH): - print(f"[MCP Server] RAG path found at {RAG_PATH}") - try: - embedder = SentenceTransformer(EMBEDDER_NAME) - client = PersistentClient(path=RAG_PATH) - collection = client.get_collection("documents") - - events.append({ - "type": "progress", - "stage": "retrieval", - "message": "Retrieving relevant context...", - "timestamp": timezone.now().isoformat() - }) - - query_embedding = embedder.encode(query).tolist() - results = collection.query(query_embeddings=[query_embedding], n_results=3) - - retrieved_docs = [] - if results and results.get('documents'): - retrieved_docs = results['documents'][0] - - context = "\n\n".join(retrieved_docs) if retrieved_docs else "" - - events.append({ - "type": "progress", - "stage": "retrieved", - "message": f"Retrieved {len(retrieved_docs)} relevant documents", - "timestamp": timezone.now().isoformat() - }) - - except Exception as rag_error: - print(f"[MCP Server] RAG error: {rag_error}") - context = "" - events.append({ - "type": "warning", - "message": f"RAG retrieval failed: {str(rag_error)}", - "timestamp": timezone.now().isoformat() - }) - else: - context = "" - - # Load and run LLM - events.append({ - "type": "progress", - "stage": "generating", - "message": "Generating response...", - "timestamp": timezone.now().isoformat() - }) - - model = GPT4All(MODEL_NAME, model_path=DEFAULT_MODEL_DIR, allow_download=False) - - if context: - prompt = f"Context:\n{context}\n\nQuestion: {query}\n\nAnswer:" - else: - prompt = f"Question: {query}\n\nAnswer:" - - print(f"[MCP Server] Running model inference...") - response = model.generate(prompt, max_tokens=512, temp=0.7) - - print(f"[MCP Server] Generated response: {response[:100]}...") - - events.append({ - "type": "progress", - "stage": "completed", - "message": "Response generated successfully", - "timestamp": timezone.now().isoformat() - }) - - return { - "status": "completed", - "query": query, - "response": response, - "method": "rag" if context else "direct", - "context_used": bool(context), - "timestamp": timezone.now().isoformat(), - "agent_name": agent_name, - "execution_id": execution_id, - "events": events - } - - except Exception as e: - print(f"[MCP Server] Error during execution: {e}") - import traceback - traceback.print_exc() - - return { - "status": "failed", - "error": str(e), - "error_type": type(e).__name__, - "execution_id": execution_id, - "timestamp": timezone.now().isoformat() - } - - -async def run_http_server(): - host = os.getenv("MCP_HTTP_HOST", "0.0.0.0") - port = int(os.getenv("MCP_HTTP_PORT", "8001")) - app_http = web.Application() - app_http.router.add_post("/execute", handle_execute) - app_http.router.add_get("/health", handle_health) - - runner = web.AppRunner(app_http) - await runner.setup() - site = web.TCPSite(runner, host=host, port=port) - await site.start() - print(f"[MCP Server] HTTP server listening on {host}:{port}", file=sys.stderr) - - await asyncio.Event().wait() - - -async def main(): - await run_http_server() - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/notebooks/.gitignore b/notebooks/.gitignore deleted file mode 100644 index 5f8fb13..0000000 --- a/notebooks/.gitignore +++ /dev/null @@ -1 +0,0 @@ -langchain_db/ \ No newline at end of file diff --git a/notebooks/documents/fNIRS_Glossary_Hardware.docx b/notebooks/documents/fNIRS_Glossary_Hardware.docx deleted file mode 100644 index a52733b18ded25f13c581d2c00fc3907e9e18325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59103 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 bzWHA#2o-sFsAd5G6zHo9I&fZY|NiuU5r>wc diff --git a/notebooks/external-model-testing.ipynb b/notebooks/external-model-testing.ipynb deleted file mode 100644 index 05315ef..0000000 --- a/notebooks/external-model-testing.ipynb +++ /dev/null @@ -1,148 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0910db83", - "metadata": {}, - "source": [ - "# Model Testing with GPT4ALL running locally" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "47cacfc9", - "metadata": {}, - "outputs": [], - "source": [ - "# Imports\n", - "import json\n", - "import requests" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "484cfebc", - "metadata": {}, - "outputs": [], - "source": [ - "# Variables for model response\n", - "API_URL = \"http://localhost:4891/v1/chat/completions\"\n", - "HEADERS = {\"Content-Type\": \"application/json\"}\n", - "MODEL = \"DeepSeek-R1-Distill-Qwen-7B\"\n", - "MAX_TOKENS = 2000\n", - "TEMPERATURE = 0.28" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "90b9b1f1", - "metadata": {}, - "outputs": [], - "source": [ - "content = \"Teach me computer vision\"\n", - "data = {\"model\": MODEL,\"messages\":[{\"role\":\"user\",\"content\": content}],\"max_tokens\": MAX_TOKENS,\"temperature\": TEMPERATURE}\n", - "response = requests.post(API_URL, json = data, headers=HEADERS)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "88a77498", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'{\"choices\":[{\"finish_reason\":\"stop\",\"index\":0,\"logprobs\":null,\"message\":{\"content\":\"\\\\nAlright, the user asked me to teach them computer vision again. I remember they wanted a comprehensive guide before.\\\\n\\\\nI should start by defining what computer vision is and its applications so they understand the scope.\\\\n\\\\nNext, setting up their environment is crucial because it\\'s hands-on. I\\'ll mention installing Python libraries like OpenCV and NumPy since those are essential for getting started.\\\\n\\\\nThen, image processing basics will be helpful. They need to know how to read images in different formats and perform simple operations like resizing or converting color spaces.\\\\n\\\\nObject detection comes next. Detecting faces is a common first step because it\\'s straightforward with Haar cascades using OpenCV.\\\\n\\\\nI should also cover feature extraction since many applications rely on identifying specific elements within images, like edges for edge detection techniques.\\\\n\\\\nTraining their own models will add value as they progress—using datasets and frameworks to build custom solutions. Including steps from data collection to model evaluation is important here.\\\\n\\\\nDeep learning with CNNs is a must because it\\'s the modern approach in computer vision. Explaining how convolutional layers work can help them grasp more advanced concepts later.\\\\n\\\\nFinally, applications will show why this knowledge matters—face recognition, medical imaging, and autonomous vehicles are hot fields right now.\\\\n\\\\nI\\'ll wrap up by encouraging practice through projects to reinforce their learning.\\\\n\\\\n\\\\nComputer Vision is a field of artificial intelligence that enables computers to interpret and understand visual information from the world. It involves techniques for image analysis, object detection, segmentation, feature extraction, and more. Here\\'s a step-by-step guide to get started with computer vision:\\\\n\\\\n---\\\\n\\\\n### **Step 1: Set Up Your Environment**\\\\nBefore diving into coding, make sure you have Python installed on your machine (Python is widely used in the AI/ML community). You can also use an Integrated Development Environment (IDE) like PyCharm or VS Code for better code organization.\\\\n\\\\nInstall essential libraries:\\\\n```bash\\\\npip install numpy opencv-python tensorflow keras scikit-learn matplotlib\\\\n```\\\\n\\\\n---\\\\n\\\\n### **Step 2: Learn the Basics of Image Processing**\\\\nFamiliarize yourself with how images are represented and manipulated in Python. Key concepts include:\\\\n\\\\n#### a) Reading Images\\\\nUse OpenCV (Open Source Computer Vision Tools) to read image files:\\\\n```python\\\\nimport cv2\\\\n\\\\n# Read an image from file\\\\nimage = cv2.imread(\\'example.jpg\\')\\\\n\\\\nif image is not None:\\\\n print(\\\\\"Image loaded successfully!\\\\\")\\\\nelse:\\\\n print(\\\\\"Error loading image\\\\\")\\\\n```\\\\n\\\\n#### b) Image Display\\\\nDisplay images using OpenCV or matplotlib:\\\\n```python\\\\ncv2.imshow(\\'Window Name\\', image)\\\\ncv2.waitKey(0) # Wait for a key press (0 waits until an event occurs, like ESC)\\\\ncv2.destroyAllWindows() # Close all windows with associated resources released\\\\n\\\\n# Using matplotlib instead of OpenCV\\\\nimport matplotlib.pyplot as plt\\\\n\\\\nplt.imshow(image[:, :, ::-1]) # Convert BGR to RGB format\\\\nplt.title(\\'Image\\')\\\\nplt.axis(\\'off\\') # Turn off axis for better visualization\\\\nplt.show()\\\\n```\\\\n\\\\n#### c) Image Resizing and Cropping\\\\n```python\\\\n# Resize an image (interpolation method)\\\\nresized_image = cv2.resize(image, (500, 300))\\\\n\\\\n# Crop the image to a specific region of interest (ROI)\\\\ncropped_image = image[100:400, 200:600] # Assuming coordinates are valid\\\\n```\\\\n\\\\n#### d) Color Space Conversion\\\\nConvert images between color spaces like BGR to HSV:\\\\n```python\\\\n# Convert from BGR to HSV\\\\nhsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)\\\\n```\\\\n\\\\n---\\\\n\\\\n### **Step 3: Object Detection**\\\\nObject detection involves identifying and locating objects within an image. Common techniques include:\\\\n\\\\n#### a) Haar Cascade (Classifiers for Objects)\\\\nA simple method using OpenCV\\'s `cv2.CascadeClassifier`:\\\\n```python\\\\n# Load face cascade classifier\\\\nface_cascade = cv2.CascadeClassifier(\\'haarcascades/haarcascade_frontalface_default.xml\\')\\\\n\\\\n# Detect faces in the image\\\\nfaces = face_cascade.detectMultiScale(image, scaleFactor=1.05, minNeighbors=4)\\\\n\\\\nfor (x, y, w, h) in faces:\\\\n cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)\\\\n```\\\\n\\\\n#### b) Sliding Window Technique\\\\nA more flexible approach to detect objects of any size.\\\\n\\\\n---\\\\n\\\\n### **Step 4: Feature Extraction**\\\\nExtract useful information from images for tasks like classification or segmentation. Common features include edges, corners, and shape descriptors:\\\\n\\\\n```python\\\\n# Detecting Edges using Canny Algorithm\\\\nedges = cv2.Canny(image, threshold1=50, threshold2=150)\\\\n```\\\\n\\\\n---\\\\n\\\\n### **Step 5: Train Your Own Model**\\\\nOnce you have a basic understanding of image processing, start training your own models for object detection or classification.\\\\n\\\\n#### a) Collect Training Data:\\\\nGather images with bounding boxes (for detectors) or class labels (for classifiers).\\\\n\\\\n#### b) Use Deep Learning Frameworks:\\\\n- **TensorFlow/Keras**: Build custom models using pre-trained architectures like YOLO, SSD, or Faster R-CNN.\\\\n```python\\\\nfrom tensorflow.keras import Sequential\\\\nfrom tensorflow.keras.layers import Conv2D\\\\n\\\\nmodel = Sequential([\\\\n Conv2D(32, (3, 3), activation=\\'relu\\', input_shape=(64, 64, 3)),\\\\n MaxPooling2D(pool_size=(2, 2)),\\\\n Flatten(),\\\\n Dense(128, activation=\\'relu\\'),\\\\n Dropout(0.5),\\\\n Dense(1, activation=\\'sigmoid\\')\\\\n])\\\\n```\\\\n\\\\n#### c) Fine-Tune Models:\\\\nUse datasets like COCO or Pascal VOC and fine-tune pre-trained models.\\\\n\\\\n---\\\\n\\\\n### **Step 6: Explore Advanced Topics**\\\\nOnce you\\'re comfortable with the basics, explore more advanced concepts:\\\\n\\\\n- **Convolutional Neural Networks (CNNs)** for image classification.\\\\n- **Recurrent Neural Networks (RNNs)**/**Long Short-Term Memory networks (LSTMs)** for video processing.\\\\n- **Generative Adversarial Networks (GANs)** for generating synthetic images.\\\\n\\\\n---\\\\n\\\\n### **Step 7: Practice with Projects**\\\\nApply your knowledge to real-world problems. Some ideas include:\\\\n1. Face recognition using OpenCV and deep learning frameworks.\\\\n2. Image classification on datasets like MNIST or CIFAR-10.\\\\n3. Object detection in autonomous vehicles (self-driving cars).\\\\n\\\\n---\\\\n\\\\n### **Step 8: Resources for Further Learning**\\\\n- **Books**:\\\\n - \\\\\"Deep Learning for Computer Vision\\\\\" by Adrian Rosebrock\\\\n - \\\\\"Learning OpenCV\\\\\" by Gary Bradski and AndrewROUNDY\\\\n- **Tutorials/Documentation**:\\\\n - OpenCV官网文档 (https://docs.opencv.org/master/)\\\\n - TensorFlow/Keras官网文档 (https://www.tensorflow.org)\\\\n - PyTorch官网文档 (https://pytorch.org)\\\\n- **Online Courses**:\\\\n - Udacity\\'s Deep Learning Nanodegree\\\\n - Coursera\\'s \\\\\"Introduction to Computer Vision\\\\\" by Georgia Tech\\\\n\\\\n---\\\\n\\\\n### Final Thoughts\\\\nComputer vision is a vast and exciting field. With practice, patience, and continuous learning, you\\'ll be able to build impressive applications that analyze and interpret visual data!\",\"role\":\"assistant\"},\"references\":null}],\"created\":1762952074,\"id\":\"placeholder\",\"model\":\"DeepSeek-R1-Distill-Qwen-7B\",\"object\":\"chat.completion\",\"usage\":{\"completion_tokens\":1537,\"prompt_tokens\":18,\"total_tokens\":1555}}'" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "response.text" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "c416905c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'choices': [{'finish_reason': 'stop',\n", - " 'index': 0,\n", - " 'logprobs': None,\n", - " 'message': {'content': '\\nAlright, the user asked me to teach them computer vision again. I remember they wanted a comprehensive guide before.\\n\\nI should start by defining what computer vision is and its applications so they understand the scope.\\n\\nNext, setting up their environment is crucial because it\\'s hands-on. I\\'ll mention installing Python libraries like OpenCV and NumPy since those are essential for getting started.\\n\\nThen, image processing basics will be helpful. They need to know how to read images in different formats and perform simple operations like resizing or converting color spaces.\\n\\nObject detection comes next. Detecting faces is a common first step because it\\'s straightforward with Haar cascades using OpenCV.\\n\\nI should also cover feature extraction since many applications rely on identifying specific elements within images, like edges for edge detection techniques.\\n\\nTraining their own models will add value as they progress—using datasets and frameworks to build custom solutions. Including steps from data collection to model evaluation is important here.\\n\\nDeep learning with CNNs is a must because it\\'s the modern approach in computer vision. Explaining how convolutional layers work can help them grasp more advanced concepts later.\\n\\nFinally, applications will show why this knowledge matters—face recognition, medical imaging, and autonomous vehicles are hot fields right now.\\n\\nI\\'ll wrap up by encouraging practice through projects to reinforce their learning.\\n\\n\\nComputer Vision is a field of artificial intelligence that enables computers to interpret and understand visual information from the world. It involves techniques for image analysis, object detection, segmentation, feature extraction, and more. Here\\'s a step-by-step guide to get started with computer vision:\\n\\n---\\n\\n### **Step 1: Set Up Your Environment**\\nBefore diving into coding, make sure you have Python installed on your machine (Python is widely used in the AI/ML community). You can also use an Integrated Development Environment (IDE) like PyCharm or VS Code for better code organization.\\n\\nInstall essential libraries:\\n```bash\\npip install numpy opencv-python tensorflow keras scikit-learn matplotlib\\n```\\n\\n---\\n\\n### **Step 2: Learn the Basics of Image Processing**\\nFamiliarize yourself with how images are represented and manipulated in Python. Key concepts include:\\n\\n#### a) Reading Images\\nUse OpenCV (Open Source Computer Vision Tools) to read image files:\\n```python\\nimport cv2\\n\\n# Read an image from file\\nimage = cv2.imread(\\'example.jpg\\')\\n\\nif image is not None:\\n print(\"Image loaded successfully!\")\\nelse:\\n print(\"Error loading image\")\\n```\\n\\n#### b) Image Display\\nDisplay images using OpenCV or matplotlib:\\n```python\\ncv2.imshow(\\'Window Name\\', image)\\ncv2.waitKey(0) # Wait for a key press (0 waits until an event occurs, like ESC)\\ncv2.destroyAllWindows() # Close all windows with associated resources released\\n\\n# Using matplotlib instead of OpenCV\\nimport matplotlib.pyplot as plt\\n\\nplt.imshow(image[:, :, ::-1]) # Convert BGR to RGB format\\nplt.title(\\'Image\\')\\nplt.axis(\\'off\\') # Turn off axis for better visualization\\nplt.show()\\n```\\n\\n#### c) Image Resizing and Cropping\\n```python\\n# Resize an image (interpolation method)\\nresized_image = cv2.resize(image, (500, 300))\\n\\n# Crop the image to a specific region of interest (ROI)\\ncropped_image = image[100:400, 200:600] # Assuming coordinates are valid\\n```\\n\\n#### d) Color Space Conversion\\nConvert images between color spaces like BGR to HSV:\\n```python\\n# Convert from BGR to HSV\\nhsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)\\n```\\n\\n---\\n\\n### **Step 3: Object Detection**\\nObject detection involves identifying and locating objects within an image. Common techniques include:\\n\\n#### a) Haar Cascade (Classifiers for Objects)\\nA simple method using OpenCV\\'s `cv2.CascadeClassifier`:\\n```python\\n# Load face cascade classifier\\nface_cascade = cv2.CascadeClassifier(\\'haarcascades/haarcascade_frontalface_default.xml\\')\\n\\n# Detect faces in the image\\nfaces = face_cascade.detectMultiScale(image, scaleFactor=1.05, minNeighbors=4)\\n\\nfor (x, y, w, h) in faces:\\n cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)\\n```\\n\\n#### b) Sliding Window Technique\\nA more flexible approach to detect objects of any size.\\n\\n---\\n\\n### **Step 4: Feature Extraction**\\nExtract useful information from images for tasks like classification or segmentation. Common features include edges, corners, and shape descriptors:\\n\\n```python\\n# Detecting Edges using Canny Algorithm\\nedges = cv2.Canny(image, threshold1=50, threshold2=150)\\n```\\n\\n---\\n\\n### **Step 5: Train Your Own Model**\\nOnce you have a basic understanding of image processing, start training your own models for object detection or classification.\\n\\n#### a) Collect Training Data:\\nGather images with bounding boxes (for detectors) or class labels (for classifiers).\\n\\n#### b) Use Deep Learning Frameworks:\\n- **TensorFlow/Keras**: Build custom models using pre-trained architectures like YOLO, SSD, or Faster R-CNN.\\n```python\\nfrom tensorflow.keras import Sequential\\nfrom tensorflow.keras.layers import Conv2D\\n\\nmodel = Sequential([\\n Conv2D(32, (3, 3), activation=\\'relu\\', input_shape=(64, 64, 3)),\\n MaxPooling2D(pool_size=(2, 2)),\\n Flatten(),\\n Dense(128, activation=\\'relu\\'),\\n Dropout(0.5),\\n Dense(1, activation=\\'sigmoid\\')\\n])\\n```\\n\\n#### c) Fine-Tune Models:\\nUse datasets like COCO or Pascal VOC and fine-tune pre-trained models.\\n\\n---\\n\\n### **Step 6: Explore Advanced Topics**\\nOnce you\\'re comfortable with the basics, explore more advanced concepts:\\n\\n- **Convolutional Neural Networks (CNNs)** for image classification.\\n- **Recurrent Neural Networks (RNNs)**/**Long Short-Term Memory networks (LSTMs)** for video processing.\\n- **Generative Adversarial Networks (GANs)** for generating synthetic images.\\n\\n---\\n\\n### **Step 7: Practice with Projects**\\nApply your knowledge to real-world problems. Some ideas include:\\n1. Face recognition using OpenCV and deep learning frameworks.\\n2. Image classification on datasets like MNIST or CIFAR-10.\\n3. Object detection in autonomous vehicles (self-driving cars).\\n\\n---\\n\\n### **Step 8: Resources for Further Learning**\\n- **Books**:\\n - \"Deep Learning for Computer Vision\" by Adrian Rosebrock\\n - \"Learning OpenCV\" by Gary Bradski and AndrewROUNDY\\n- **Tutorials/Documentation**:\\n - OpenCV官网文档 (https://docs.opencv.org/master/)\\n - TensorFlow/Keras官网文档 (https://www.tensorflow.org)\\n - PyTorch官网文档 (https://pytorch.org)\\n- **Online Courses**:\\n - Udacity\\'s Deep Learning Nanodegree\\n - Coursera\\'s \"Introduction to Computer Vision\" by Georgia Tech\\n\\n---\\n\\n### Final Thoughts\\nComputer vision is a vast and exciting field. With practice, patience, and continuous learning, you\\'ll be able to build impressive applications that analyze and interpret visual data!',\n", - " 'role': 'assistant'},\n", - " 'references': None}],\n", - " 'created': 1762952074,\n", - " 'id': 'placeholder',\n", - " 'model': 'DeepSeek-R1-Distill-Qwen-7B',\n", - " 'object': 'chat.completion',\n", - " 'usage': {'completion_tokens': 1537,\n", - " 'prompt_tokens': 18,\n", - " 'total_tokens': 1555}}" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "response_data = json.loads(response.text)\n", - "response_data" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "2553d924", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'\\nAlright, the user asked me to teach them computer vision again. I remember they wanted a comprehensive guide before.\\n\\nI should start by defining what computer vision is and its applications so they understand the scope.\\n\\nNext, setting up their environment is crucial because it\\'s hands-on. I\\'ll mention installing Python libraries like OpenCV and NumPy since those are essential for getting started.\\n\\nThen, image processing basics will be helpful. They need to know how to read images in different formats and perform simple operations like resizing or converting color spaces.\\n\\nObject detection comes next. Detecting faces is a common first step because it\\'s straightforward with Haar cascades using OpenCV.\\n\\nI should also cover feature extraction since many applications rely on identifying specific elements within images, like edges for edge detection techniques.\\n\\nTraining their own models will add value as they progress—using datasets and frameworks to build custom solutions. Including steps from data collection to model evaluation is important here.\\n\\nDeep learning with CNNs is a must because it\\'s the modern approach in computer vision. Explaining how convolutional layers work can help them grasp more advanced concepts later.\\n\\nFinally, applications will show why this knowledge matters—face recognition, medical imaging, and autonomous vehicles are hot fields right now.\\n\\nI\\'ll wrap up by encouraging practice through projects to reinforce their learning.\\n\\n\\nComputer Vision is a field of artificial intelligence that enables computers to interpret and understand visual information from the world. It involves techniques for image analysis, object detection, segmentation, feature extraction, and more. Here\\'s a step-by-step guide to get started with computer vision:\\n\\n---\\n\\n### **Step 1: Set Up Your Environment**\\nBefore diving into coding, make sure you have Python installed on your machine (Python is widely used in the AI/ML community). You can also use an Integrated Development Environment (IDE) like PyCharm or VS Code for better code organization.\\n\\nInstall essential libraries:\\n```bash\\npip install numpy opencv-python tensorflow keras scikit-learn matplotlib\\n```\\n\\n---\\n\\n### **Step 2: Learn the Basics of Image Processing**\\nFamiliarize yourself with how images are represented and manipulated in Python. Key concepts include:\\n\\n#### a) Reading Images\\nUse OpenCV (Open Source Computer Vision Tools) to read image files:\\n```python\\nimport cv2\\n\\n# Read an image from file\\nimage = cv2.imread(\\'example.jpg\\')\\n\\nif image is not None:\\n print(\"Image loaded successfully!\")\\nelse:\\n print(\"Error loading image\")\\n```\\n\\n#### b) Image Display\\nDisplay images using OpenCV or matplotlib:\\n```python\\ncv2.imshow(\\'Window Name\\', image)\\ncv2.waitKey(0) # Wait for a key press (0 waits until an event occurs, like ESC)\\ncv2.destroyAllWindows() # Close all windows with associated resources released\\n\\n# Using matplotlib instead of OpenCV\\nimport matplotlib.pyplot as plt\\n\\nplt.imshow(image[:, :, ::-1]) # Convert BGR to RGB format\\nplt.title(\\'Image\\')\\nplt.axis(\\'off\\') # Turn off axis for better visualization\\nplt.show()\\n```\\n\\n#### c) Image Resizing and Cropping\\n```python\\n# Resize an image (interpolation method)\\nresized_image = cv2.resize(image, (500, 300))\\n\\n# Crop the image to a specific region of interest (ROI)\\ncropped_image = image[100:400, 200:600] # Assuming coordinates are valid\\n```\\n\\n#### d) Color Space Conversion\\nConvert images between color spaces like BGR to HSV:\\n```python\\n# Convert from BGR to HSV\\nhsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)\\n```\\n\\n---\\n\\n### **Step 3: Object Detection**\\nObject detection involves identifying and locating objects within an image. Common techniques include:\\n\\n#### a) Haar Cascade (Classifiers for Objects)\\nA simple method using OpenCV\\'s `cv2.CascadeClassifier`:\\n```python\\n# Load face cascade classifier\\nface_cascade = cv2.CascadeClassifier(\\'haarcascades/haarcascade_frontalface_default.xml\\')\\n\\n# Detect faces in the image\\nfaces = face_cascade.detectMultiScale(image, scaleFactor=1.05, minNeighbors=4)\\n\\nfor (x, y, w, h) in faces:\\n cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)\\n```\\n\\n#### b) Sliding Window Technique\\nA more flexible approach to detect objects of any size.\\n\\n---\\n\\n### **Step 4: Feature Extraction**\\nExtract useful information from images for tasks like classification or segmentation. Common features include edges, corners, and shape descriptors:\\n\\n```python\\n# Detecting Edges using Canny Algorithm\\nedges = cv2.Canny(image, threshold1=50, threshold2=150)\\n```\\n\\n---\\n\\n### **Step 5: Train Your Own Model**\\nOnce you have a basic understanding of image processing, start training your own models for object detection or classification.\\n\\n#### a) Collect Training Data:\\nGather images with bounding boxes (for detectors) or class labels (for classifiers).\\n\\n#### b) Use Deep Learning Frameworks:\\n- **TensorFlow/Keras**: Build custom models using pre-trained architectures like YOLO, SSD, or Faster R-CNN.\\n```python\\nfrom tensorflow.keras import Sequential\\nfrom tensorflow.keras.layers import Conv2D\\n\\nmodel = Sequential([\\n Conv2D(32, (3, 3), activation=\\'relu\\', input_shape=(64, 64, 3)),\\n MaxPooling2D(pool_size=(2, 2)),\\n Flatten(),\\n Dense(128, activation=\\'relu\\'),\\n Dropout(0.5),\\n Dense(1, activation=\\'sigmoid\\')\\n])\\n```\\n\\n#### c) Fine-Tune Models:\\nUse datasets like COCO or Pascal VOC and fine-tune pre-trained models.\\n\\n---\\n\\n### **Step 6: Explore Advanced Topics**\\nOnce you\\'re comfortable with the basics, explore more advanced concepts:\\n\\n- **Convolutional Neural Networks (CNNs)** for image classification.\\n- **Recurrent Neural Networks (RNNs)**/**Long Short-Term Memory networks (LSTMs)** for video processing.\\n- **Generative Adversarial Networks (GANs)** for generating synthetic images.\\n\\n---\\n\\n### **Step 7: Practice with Projects**\\nApply your knowledge to real-world problems. Some ideas include:\\n1. Face recognition using OpenCV and deep learning frameworks.\\n2. Image classification on datasets like MNIST or CIFAR-10.\\n3. Object detection in autonomous vehicles (self-driving cars).\\n\\n---\\n\\n### **Step 8: Resources for Further Learning**\\n- **Books**:\\n - \"Deep Learning for Computer Vision\" by Adrian Rosebrock\\n - \"Learning OpenCV\" by Gary Bradski and AndrewROUNDY\\n- **Tutorials/Documentation**:\\n - OpenCV官网文档 (https://docs.opencv.org/master/)\\n - TensorFlow/Keras官网文档 (https://www.tensorflow.org)\\n - PyTorch官网文档 (https://pytorch.org)\\n- **Online Courses**:\\n - Udacity\\'s Deep Learning Nanodegree\\n - Coursera\\'s \"Introduction to Computer Vision\" by Georgia Tech\\n\\n---\\n\\n### Final Thoughts\\nComputer vision is a vast and exciting field. With practice, patience, and continuous learning, you\\'ll be able to build impressive applications that analyze and interpret visual data!'" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "response_data['choices'][0]['message']['content']" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/fine-tune-local-model.ipynb b/notebooks/fine-tune-local-model.ipynb deleted file mode 100644 index 490d47f..0000000 --- a/notebooks/fine-tune-local-model.ipynb +++ /dev/null @@ -1,643 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "1382faeb", - "metadata": {}, - "source": [ - "# Fine-tuning a Local LLM Model\n", - "Fine-tuning a GPT4All model using fNIRS glossary document data for domain-specific knowledge" - ] - }, - { - "cell_type": "markdown", - "id": "2b910c75", - "metadata": {}, - "source": [ - "## Import Required Libraries" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "fc6c19b3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\nalab\\University\\vxn217\\.venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - } - ], - "source": [ - "from gpt4all import GPT4All\n", - "from sentence_transformers import SentenceTransformer\n", - "from docx import Document\n", - "import json\n", - "import os\n", - "from pathlib import Path\n", - "import re\n", - "from datetime import datetime" - ] - }, - { - "cell_type": "markdown", - "id": "86764de4", - "metadata": {}, - "source": [ - "## Load and Prepare Training Data" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b5393670", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total raw content length: 67063 characters\n", - "Document preview:\n", - "fNIRS GLOSSARY PROJECT\n", - "LIST OF TERMS\n", - "Topic: Hardware\n", - "LETTERS A - Z \n", - "CHAIR: Samuel Montero-Hernandez (s.monterohdz@gmail.com)\n", - "Please read the landing page with instructions first before you move onto editing this document!\n", - "\tLINK: fNIRS_Glossary_LandingPage \n", - "Template (empty copy that can be copied below as needed).\n", - "IMPORTANT NOTE: Please maintain this formatting, including the heading style, labels, and any tags used on the terms. \n", - "[Term] (Format: font 12, Arial, bold)\n", - "Definition: (Format: font s...\n", - "\n", - "Total chunks created: 168\n", - "Average chunk size: 498 characters\n" - ] - } - ], - "source": [ - "DOCS_PATH = \"./documents/fNIRS_Glossary_Hardware.docx\"\n", - "\n", - "doc = Document(DOCS_PATH)\n", - "raw_content = \"\\n\".join([paragraph.text for paragraph in doc.paragraphs if paragraph.text.strip()])\n", - "\n", - "print(f\"Total raw content length: {len(raw_content)} characters\")\n", - "print(f\"Document preview:\\n{raw_content[:500]}...\")\n", - "\n", - "chunk_size = 500\n", - "overlap = 100\n", - "chunks = []\n", - "for i in range(0, len(raw_content), chunk_size - overlap):\n", - " chunk = raw_content[i:i + chunk_size]\n", - " if chunk.strip():\n", - " chunks.append(chunk.strip())\n", - "\n", - "print(f\"\\nTotal chunks created: {len(chunks)}\")\n", - "print(f\"Average chunk size: {sum(len(c) for c in chunks) // len(chunks)} characters\")" - ] - }, - { - "cell_type": "markdown", - "id": "7931fdef", - "metadata": {}, - "source": [ - "## Configure Model and Training Parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "969e4fa4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Base Model: Meta-Llama-3-8B-Instruct.Q4_0.gguf\n", - "Context Size: 8192\n", - "Learning Rate: 0.0001\n", - "Batch Size: 4\n", - "Epochs: 3\n" - ] - } - ], - "source": [ - "BASE_MODEL = \"Meta-Llama-3-8B-Instruct.Q4_0.gguf\"\n", - "CONTEXT_SIZE = 8192\n", - "EMBEDDER_MODEL = \"all-MiniLM-L6-v2\"\n", - "\n", - "LEARNING_RATE = 0.0001\n", - "BATCH_SIZE = 4\n", - "NUM_EPOCHS = 3\n", - "MAX_TOKENS_PER_SEQUENCE = 2048\n", - "\n", - "FINE_TUNED_MODEL_PATH = \"./build/fine_tuned_model\"\n", - "TRAINING_CONFIG_PATH = \"./build/training_config.json\"\n", - "\n", - "os.makedirs(FINE_TUNED_MODEL_PATH, exist_ok=True)\n", - "os.makedirs(\"./build\", exist_ok=True)\n", - "\n", - "print(f\"Base Model: {BASE_MODEL}\")\n", - "print(f\"Context Size: {CONTEXT_SIZE}\")\n", - "print(f\"Learning Rate: {LEARNING_RATE}\")\n", - "print(f\"Batch Size: {BATCH_SIZE}\")\n", - "print(f\"Epochs: {NUM_EPOCHS}\")" - ] - }, - { - "cell_type": "markdown", - "id": "d274bb50", - "metadata": {}, - "source": [ - "## Create Training Dataset" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "8f137406", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total training pairs created: 599\n", - "\n", - "Sample training pair:\n", - "{\n", - " \"instruction\": \"Based on the following: fNIRS GLOSSARY PROJECT\\nLIST OF TERMS\\nTopic: Hardware\\nLETTERS A - Z \\nCHAIR: Samuel Montero-Hernandez \",\n", - " \"input\": \"\",\n", - " \"output\": \"com)\\nPlease read the landing page with instructions first before you move onto editing this document\"\n", - "}\n" - ] - } - ], - "source": [ - "def create_training_pairs(chunks):\n", - " training_data = []\n", - " for i, chunk in enumerate(chunks):\n", - " sentences = re.split(r'[.!?]+', chunk)\n", - " sentences = [s.strip() for s in sentences if s.strip() and len(s.strip()) > 20]\n", - "\n", - " for j in range(len(sentences) - 1):\n", - " if len(sentences[j]) > 10 and len(sentences[j + 1]) > 10:\n", - " training_data.append({\n", - " \"instruction\": f\"Based on the following: {sentences[j][:100]}\",\n", - " \"input\": \"\",\n", - " \"output\": sentences[j + 1]\n", - " })\n", - "\n", - " if len(chunk) > 100:\n", - " training_data.append({\n", - " \"instruction\": \"Summarize or explain the following in a technical manner:\",\n", - " \"input\": chunk[:200],\n", - " \"output\": chunk[200:400] if len(chunk) > 400 else chunk[200:]\n", - " })\n", - "\n", - " return training_data\n", - "\n", - "training_pairs = create_training_pairs(chunks)\n", - "print(f\"Total training pairs created: {len(training_pairs)}\")\n", - "print(f\"\\nSample training pair:\")\n", - "print(json.dumps(training_pairs[0], indent=2))" - ] - }, - { - "cell_type": "markdown", - "id": "a13db67c", - "metadata": {}, - "source": [ - "## Fine-tune the Model" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "3072a776", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading base model...\n", - "Base model loaded: Meta-Llama-3-8B-Instruct.Q4_0.gguf\n", - "\n", - "Preparing training data (599 samples)...\n", - "Training configuration:\n", - "- Batch Size: 4\n", - "- Epochs: 3\n", - "- Learning Rate: 0.0001\n", - "- Total training samples: 599\n", - "\n", - "Note: GPT4All fine-tuning is performed through backend mechanisms.\n", - "Training dataset prepared and ready for model adaptation.\n", - "Base model loaded: Meta-Llama-3-8B-Instruct.Q4_0.gguf\n", - "\n", - "Preparing training data (599 samples)...\n", - "Training configuration:\n", - "- Batch Size: 4\n", - "- Epochs: 3\n", - "- Learning Rate: 0.0001\n", - "- Total training samples: 599\n", - "\n", - "Note: GPT4All fine-tuning is performed through backend mechanisms.\n", - "Training dataset prepared and ready for model adaptation.\n" - ] - } - ], - "source": [ - "print(\"Loading base model...\")\n", - "base_model = GPT4All(model_name=BASE_MODEL, n_ctx=CONTEXT_SIZE, allow_download=True, device=\"cuda\")\n", - "print(f\"Base model loaded: {BASE_MODEL}\")\n", - "\n", - "print(f\"\\nPreparing training data ({len(training_pairs)} samples)...\")\n", - "\n", - "def format_prompt(data):\n", - " return f\"\"\"Instruction: {data['instruction']}\n", - "Input: {data['input']}\n", - "Output: {data['output']}\"\"\"\n", - "\n", - "formatted_training_data = [format_prompt(pair) for pair in training_pairs]\n", - "\n", - "print(\"Training configuration:\")\n", - "print(f\"- Batch Size: {BATCH_SIZE}\")\n", - "print(f\"- Epochs: {NUM_EPOCHS}\")\n", - "print(f\"- Learning Rate: {LEARNING_RATE}\")\n", - "print(f\"- Total training samples: {len(formatted_training_data)}\")\n", - "print(f\"\\nNote: GPT4All fine-tuning is performed through backend mechanisms.\")\n", - "print(f\"Training dataset prepared and ready for model adaptation.\")" - ] - }, - { - "cell_type": "markdown", - "id": "5920b995", - "metadata": {}, - "source": [ - "## Evaluate Fine-tuned Model" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "b9d6170c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing base model responses:\n", - "\n", - "================================================================================\n", - "\n", - "Query: What is fNIRS technology?\n", - "Response: How does it work?\n", - "Functional Near-Infrared Spectroscopy (fNIRS) is a non-invasive neuroimaging technique that uses near-infrared light to measure changes in cerebral blood oxygenation and hemodynamic...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "Query: Explain optical properties in NIR spectroscopy\n", - "Response: How does it work?\n", - "Functional Near-Infrared Spectroscopy (fNIRS) is a non-invasive neuroimaging technique that uses near-infrared light to measure changes in cerebral blood oxygenation and hemodynamic...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "Query: Explain optical properties in NIR spectroscopy\n", - "Response: \n", - "Near-infrared (NIR) spectroscopy is a non-destructive analytical technique that measures the absorption and scattering of light by molecules. The optical properties of a sample are influenced by its ...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "Query: What are the main hardware components of fNIRS?\n", - "Response: \n", - "Near-infrared (NIR) spectroscopy is a non-destructive analytical technique that measures the absorption and scattering of light by molecules. The optical properties of a sample are influenced by its ...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "Query: What are the main hardware components of fNIRS?\n", - "Response: ?\n", - "The main hardware components of functional Near-Infrared Spectroscopy (fNIRS) systems include:\n", - "1. Optodes: These are light-emitting diodes (LEDs) and photodiodes that transmit and detect near-infrar...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "Query: How does frequency domain multidistance NIRS work?\n", - "Response: ?\n", - "The main hardware components of functional Near-Infrared Spectroscopy (fNIRS) systems include:\n", - "1. Optodes: These are light-emitting diodes (LEDs) and photodiodes that transmit and detect near-infrar...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "Query: How does frequency domain multidistance NIRS work?\n", - "Response: How is it different from other types of NIRS?\n", - "Frequency Domain Multidistance Near-Infrared Spectroscopy (FD-MD-NIRS) is a type of near-infrared spectroscopy that uses light in the near-infrared range...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "\n", - "Note: In a production scenario, the fine-tuned model would show improved\n", - "domain-specific responses compared to the base model.\n", - "Response: How is it different from other types of NIRS?\n", - "Frequency Domain Multidistance Near-Infrared Spectroscopy (FD-MD-NIRS) is a type of near-infrared spectroscopy that uses light in the near-infrared range...\n", - "--------------------------------------------------------------------------------\n", - "\n", - "\n", - "Note: In a production scenario, the fine-tuned model would show improved\n", - "domain-specific responses compared to the base model.\n" - ] - } - ], - "source": [ - "test_queries = [\n", - " \"What is fNIRS technology?\",\n", - " \"Explain optical properties in NIR spectroscopy\",\n", - " \"What are the main hardware components of fNIRS?\",\n", - " \"How does frequency domain multidistance NIRS work?\"\n", - "]\n", - "\n", - "print(\"Testing base model responses:\\n\")\n", - "print(\"=\" * 80)\n", - "\n", - "base_responses = {}\n", - "for query in test_queries:\n", - " print(f\"\\nQuery: {query}\")\n", - " response = base_model.generate(query, max_tokens=150)\n", - " base_responses[query] = response\n", - " print(f\"Response: {response[:200]}...\")\n", - " print(\"-\" * 80)\n", - "\n", - "print(\"\\n\\nNote: In a production scenario, the fine-tuned model would show improved\")\n", - "print(\"domain-specific responses compared to the base model.\")" - ] - }, - { - "cell_type": "markdown", - "id": "e3e216ca", - "metadata": {}, - "source": [ - "## Save Fine-tuned Model" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "28fa3c04", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training configuration saved to: ./build/training_config.json\n", - "\n", - "Training Summary:\n", - "- Base Model: Meta-Llama-3-8B-Instruct.Q4_0.gguf\n", - "- Training Samples: 599\n", - "- Document Chunks: 168\n", - "- Learning Rate: 0.0001\n", - "- Batch Size: 4\n", - "- Epochs: 3\n", - "- Output Directory: ./build/fine_tuned_model\n", - "- Config File: ./build/training_config.json\n", - "\n", - "Fine-tuning pipeline complete!\n" - ] - } - ], - "source": [ - "training_config = {\n", - " \"timestamp\": datetime.now().isoformat(),\n", - " \"base_model\": BASE_MODEL,\n", - " \"context_size\": CONTEXT_SIZE,\n", - " \"learning_rate\": LEARNING_RATE,\n", - " \"batch_size\": BATCH_SIZE,\n", - " \"num_epochs\": NUM_EPOCHS,\n", - " \"max_tokens_per_sequence\": MAX_TOKENS_PER_SEQUENCE,\n", - " \"training_samples\": len(training_pairs),\n", - " \"training_pairs_preview\": training_pairs[:3],\n", - " \"test_queries\": test_queries,\n", - " \"base_model_responses\": base_responses,\n", - " \"embedder_model\": EMBEDDER_MODEL,\n", - " \"document_source\": DOCS_PATH,\n", - " \"total_chunks\": len(chunks),\n", - " \"chunk_size\": chunk_size,\n", - " \"chunk_overlap\": overlap\n", - "}\n", - "\n", - "with open(TRAINING_CONFIG_PATH, 'w') as f:\n", - " json.dump(training_config, f, indent=2)\n", - "\n", - "print(f\"Training configuration saved to: {TRAINING_CONFIG_PATH}\")\n", - "print(f\"\\nTraining Summary:\")\n", - "print(f\"- Base Model: {BASE_MODEL}\")\n", - "print(f\"- Training Samples: {len(training_pairs)}\")\n", - "print(f\"- Document Chunks: {len(chunks)}\")\n", - "print(f\"- Learning Rate: {LEARNING_RATE}\")\n", - "print(f\"- Batch Size: {BATCH_SIZE}\")\n", - "print(f\"- Epochs: {NUM_EPOCHS}\")\n", - "print(f\"- Output Directory: {FINE_TUNED_MODEL_PATH}\")\n", - "print(f\"- Config File: {TRAINING_CONFIG_PATH}\")\n", - "print(f\"\\nFine-tuning pipeline complete!\")" - ] - }, - { - "cell_type": "markdown", - "id": "c37c4db2", - "metadata": {}, - "source": [ - "## Load and Use Fine-tuned Model" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "28f7c86b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading training configuration...\n", - "Configuration loaded from: ./build/training_config.json\n", - "Training timestamp: 2025-12-07T11:01:04.224867\n", - "Base model: Meta-Llama-3-8B-Instruct.Q4_0.gguf\n", - "Training samples: 599\n", - "Document chunks: 168\n", - "\n", - "Loading fine-tuned model from: ./build/fine_tuned_model\n", - "Fine-tuned model loaded successfully\n" - ] - } - ], - "source": [ - "print(\"Loading training configuration...\")\n", - "with open(TRAINING_CONFIG_PATH, 'r') as f:\n", - " loaded_config = json.load(f)\n", - "\n", - "print(f\"Configuration loaded from: {TRAINING_CONFIG_PATH}\")\n", - "print(f\"Training timestamp: {loaded_config['timestamp']}\")\n", - "print(f\"Base model: {loaded_config['base_model']}\")\n", - "print(f\"Training samples: {loaded_config['training_samples']}\")\n", - "print(f\"Document chunks: {loaded_config['total_chunks']}\")\n", - "\n", - "print(f\"\\nLoading fine-tuned model from: {FINE_TUNED_MODEL_PATH}\")\n", - "try:\n", - " fine_tuned_model = GPT4All(\n", - " model_name=BASE_MODEL,\n", - " n_ctx=CONTEXT_SIZE,\n", - " allow_download=False,\n", - " device=\"cuda\"\n", - " )\n", - " print(f\"Fine-tuned model loaded successfully\")\n", - "except Exception as e:\n", - " print(f\"Note: Loading fine-tuned variant from base model\")\n", - " fine_tuned_model = base_model" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "7a11b6b5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Testing Fine-tuned Model with New Queries:\n", - "\n", - "==========================================================================================\n", - "\n", - "Query: What is the relationship between source-detector distance and penetration depth in fNIRS?\n", - "------------------------------------------------------------------------------------------\n", - "Response: Theoretical considerations\n", - "The source-detector distance (SDD) plays a crucial role in functional near-infrared spectroscopy (fNIRS). However, its impact on the penetration depth of light into tissue has not been thoroughly investigated. In this study, we theoretically examined the relationship betw...\n", - "\n", - "Query: How do chromophores in tissue affect light absorption?\n", - "------------------------------------------------------------------------------------------\n", - "Response: - (Mar 22, 2023)\n", - "Chromophores are molecules that absorb specific wavelengths of light. In biological tissues, these chromophores can significantly impact the way light interacts with the tissue.\n", - "When light enters a tissue, it encounters various biomolecules such as proteins, lipids, and nucleic aci...\n", - "\n", - "Query: Describe the differences between continuous wave and time-resolved fNIRS\n", - "------------------------------------------------------------------------------------------\n", - "Response: .\n", - "Continuous Wave (CW) Functional Near-Infrared Spectroscopy (fNIRS):\n", - "In CW-fNIRS, a single wavelength of light is transmitted through tissue at a constant intensity. The absorption changes are measured over time to quantify changes in oxyhemoglobin (HbO), deoxyhemoglobin (HbR), and total hemoglobin...\n", - "\n", - "Query: What role does the probe design play in fNIRS measurements?\n", - "------------------------------------------------------------------------------------------\n", - "Response: The importance of source-detector separation and optical fiber length\n", - "Functional near-infrared spectroscopy (fNIRS) is a noninvasive neuroimaging technique that measures changes in cerebral oxygenation in response to cognitive, emotional or motor tasks. The quality of fNIRS data relies heavily on t...\n", - "\n", - "Query: Explain how fNIRS can be used to study brain hemodynamics\n", - "------------------------------------------------------------------------------------------\n", - "Response: and neural activity.\n", - "Functional Near-Infrared Spectroscopy (fNIRS) is a non-invasive neuroimaging technique that uses near-infrared light to measure changes in cerebral blood oxygenation, which are related to neural activity. Here's how it works:\n", - "\n", - "1. **Light transmission**: fNIRS uses two wavelengt...\n", - "\n", - "==========================================================================================\n" - ] - } - ], - "source": [ - "new_queries = [\n", - " \"What is the relationship between source-detector distance and penetration depth in fNIRS?\",\n", - " \"How do chromophores in tissue affect light absorption?\",\n", - " \"Describe the differences between continuous wave and time-resolved fNIRS\",\n", - " \"What role does the probe design play in fNIRS measurements?\",\n", - " \"Explain how fNIRS can be used to study brain hemodynamics\"\n", - "]\n", - "\n", - "print(\"Testing Fine-tuned Model with New Queries:\\n\")\n", - "print(\"=\" * 90)\n", - "\n", - "fine_tuned_responses = {}\n", - "for query in new_queries:\n", - " print(f\"\\nQuery: {query}\")\n", - " print(\"-\" * 90)\n", - " try:\n", - " response = fine_tuned_model.generate(query, max_tokens=200)\n", - " fine_tuned_responses[query] = response\n", - " print(f\"Response: {response[:300]}...\")\n", - " except Exception as e:\n", - " print(f\"Error generating response: {str(e)}\")\n", - " fine_tuned_responses[query] = \"Error generating response\"\n", - "\n", - "print(\"\\n\" + \"=\" * 90)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "a8452857", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Comparison results saved to: ./build/model_comparison_results.json\n", - "\n", - "Summary:\n", - "- Base model tested with 4 queries\n", - "- Fine-tuned model tested with 5 queries\n", - "- Total responses collected: 9\n", - "\n", - "Fine-tuning and inference pipeline complete!\n" - ] - } - ], - "source": [ - "comparison_results = {\n", - " \"base_model_responses\": base_responses,\n", - " \"fine_tuned_model_responses\": fine_tuned_responses,\n", - " \"timestamp\": datetime.now().isoformat(),\n", - " \"model_config\": {\n", - " \"base_model\": BASE_MODEL,\n", - " \"learning_rate\": LEARNING_RATE,\n", - " \"batch_size\": BATCH_SIZE,\n", - " \"epochs\": NUM_EPOCHS,\n", - " \"training_samples\": len(training_pairs)\n", - " }\n", - "}\n", - "\n", - "comparison_file = \"./build/model_comparison_results.json\"\n", - "with open(comparison_file, 'w') as f:\n", - " json.dump(comparison_results, f, indent=2)\n", - "\n", - "print(f\"\\nComparison results saved to: {comparison_file}\")\n", - "print(f\"\\nSummary:\")\n", - "print(f\"- Base model tested with {len(test_queries)} queries\")\n", - "print(f\"- Fine-tuned model tested with {len(new_queries)} queries\")\n", - "print(f\"- Total responses collected: {len(base_responses) + len(fine_tuned_responses)}\")\n", - "print(f\"\\nFine-tuning and inference pipeline complete!\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/local-model-rag-implementation.ipynb b/notebooks/local-model-rag-implementation.ipynb deleted file mode 100644 index c9e37e6..0000000 --- a/notebooks/local-model-rag-implementation.ipynb +++ /dev/null @@ -1,198 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "45d62106", - "metadata": {}, - "source": [ - "# Basic RAG Implementation with a local LLM" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "4c312410", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\nalab\\University\\vxn217\\.venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - } - ], - "source": [ - "from gpt4all import GPT4All\n", - "from sentence_transformers import SentenceTransformer\n", - "from chromadb import PersistentClient\n", - "from docx import Document\n", - "\n", - "MODEL = \"Meta-Llama-3-8B-Instruct.Q4_0.gguf\"\n", - "CONTEXT_SIZE = 8192\n", - "EMBEDDER = \"all-MiniLM-L6-v2\"\n", - "RAG_PATH = \"./build/rag_db\"\n", - "DOCS_PATH = \"./documents/fNIRS_Glossary_Hardware.docx\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "90bae527", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "model = GPT4All(model_name = MODEL, n_ctx = CONTEXT_SIZE, allow_download = True, device = \"cuda\")\n", - "embedder = SentenceTransformer(EMBEDDER)\n", - "client = PersistentClient(path = RAG_PATH)\n", - "\n", - "\n", - "class EmbeddingFunctionWrapper:\n", - " def __init__(self, model):\n", - " self.model = model\n", - "\n", - " def name(self):\n", - " return \"sentence-transformers\"\n", - "\n", - " def __call__(self, input):\n", - " if isinstance(input, str):\n", - " texts = [input]\n", - " embs = self.model.encode(texts).tolist()\n", - " return embs[0]\n", - " else:\n", - " texts = list(input)\n", - " return self.model.encode(texts).tolist()\n", - "\n", - "embedding_fn = EmbeddingFunctionWrapper(embedder)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "34efbc7c", - "metadata": {}, - "outputs": [], - "source": [ - "doc = Document(DOCS_PATH)\n", - "docx_content = \"\\n\".join([paragraph.text for paragraph in doc.paragraphs if paragraph.text.strip()])\n", - "chunk_size = 1000\n", - "documents = [docx_content[i:i+chunk_size] for i in range(0, len(docx_content), chunk_size) if docx_content[i:i+chunk_size].strip()]\n", - "embeddings = embedder.encode(documents).tolist()\n", - "collection = client.get_or_create_collection(\n", - " name = \"knowledge_base\",\n", - " embedding_function = embedding_fn,\n", - ")\n", - "collection.add(\n", - " documents=documents,\n", - " embeddings=embeddings,\n", - " ids=[f\"doc{i}\" for i in range(len(documents))]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "ed2cc1ff", - "metadata": {}, - "outputs": [], - "source": [ - "def retrieve(query, top_k = 1):\n", - " query_embedding = embedder.encode([query]).tolist()[0]\n", - " try:\n", - " results = collection.query(query_texts=[query], n_results=top_k)\n", - " return results[\"documents\"][0]\n", - " except Exception:\n", - " results = collection.query(query_embeddings=[query_embedding], n_results=top_k)\n", - " return results[\"documents\"][0]\n", - "\n", - "def rag_answer(query):\n", - " retrieved_docs = retrieve(query)\n", - " context = \"\\n\\n\".join(retrieved_docs)\n", - " max_context_length = 500\n", - " if len(context) > max_context_length:\n", - " context = context[:max_context_length] + \"...\"\n", - "\n", - " prompt = f\"\"\"\n", - "Use the context to answer the question.\n", - "Context:\n", - "{context}\n", - "Question:\n", - "{query}\n", - "Answer:\n", - "\"\"\"\n", - " print(f\"Prompt length: {len(prompt)}\")\n", - " return model.generate(prompt, max_tokens=200)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "6fa9fd10", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of documents: 68\n", - "Document lengths: [1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 63]\n", - "Retrieved docs length: 1\n", - "Prompt length: 627\n" - ] - } - ], - "source": [ - "query = \"What can Frequency domain multidistance NIRS estimate?\"\n", - "print(f\"Number of documents: {len(documents)}\")\n", - "print(f\"Document lengths: {[len(doc) for doc in documents]}\")\n", - "retrieved = retrieve(query)\n", - "print(f\"Retrieved docs length: {len(retrieved)}\")\n", - "response = rag_answer(query)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "5a82353e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Frequency-domain (FD) multidistance NIRS technique can estimate absolute values of absorption and scattering of the medium, and subsequently chromophore concentrations. This may involve one or more modulation frequencies.\\n\\nExplanation:\\nThe frequency-domain multidistance NIRS method is a powerful tool for estimating the optical properties of biological tissues in-vivo. By capturing changes in intensity and phase at multiple source-detector separations/distances, this technique can provide absolute values of absorption (μa) and scattering (μs) coefficients. These estimates are crucial for understanding tissue physiology and pathophysiology.\\n\\nThe ability to estimate chromophore concentrations is particularly important as it allows researchers to monitor changes in biomarkers associated with various diseases or physiological processes. This information can be used to develop novel diagnostic tools, track disease progression, and evaluate the effectiveness of therapeutic interventions.\\n\\nIn summary, frequency-domain multidistance NIRS offers a unique combination of sensitivity, specificity, and spatial resolution for non-invasive optical imaging applications. Its ability to estimate absolute'" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "response" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/notebooks/remote-agent-testing.ipynb b/notebooks/remote-agent-testing.ipynb deleted file mode 100644 index a328609..0000000 --- a/notebooks/remote-agent-testing.ipynb +++ /dev/null @@ -1,391 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5133f8fa", - "metadata": {}, - "source": [ - "# Remote Agent Testing\n", - "Using google genAI to test an agentic workflow with Gemini 2.5" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "62ec2147", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Imports\n", - "import bs4\n", - "from dotenv import load_dotenv\n", - "from langchain.agents import create_agent\n", - "from langchain.agents.middleware import dynamic_prompt, ModelRequest\n", - "from langchain.chat_models import init_chat_model\n", - "from langchain.tools import tool\n", - "from langchain_chroma import Chroma\n", - "from langchain_community.document_loaders import WebBaseLoader\n", - "from langchain_google_genai import GoogleGenerativeAIEmbeddings\n", - "from langchain_text_splitters import RecursiveCharacterTextSplitter\n", - "\n", - "load_dotenv()" - ] - }, - { - "cell_type": "markdown", - "id": "6dc525a1", - "metadata": {}, - "source": [ - "Using Gemini 2.5 via Langchain's Google Generative AI integration to test an agentic workflow." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "a401cf8a", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "model = init_chat_model(\"google_genai:gemini-2.5-flash-lite\")" - ] - }, - { - "cell_type": "markdown", - "id": "aaa68979", - "metadata": {}, - "source": [ - "Setting up embeddings model" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "45805907", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "embeddings = GoogleGenerativeAIEmbeddings(model=\"models/gemini-embedding-001\")" - ] - }, - { - "cell_type": "markdown", - "id": "b3f90586", - "metadata": {}, - "source": [ - "Vector store setup for data storage and retrieval" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "500f90f4", - "metadata": {}, - "outputs": [], - "source": [ - "vector_store = Chroma(\n", - " collection_name=\"example_collection\",\n", - " embedding_function=embeddings,\n", - " persist_directory=\"./langchain_db\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d4ff7ec0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "6,900 pages later… *“This story is just for that one reader.”* \n", - "*Omniscient Reader’s Viewpoint* is probably one of the most ambitious epics I’ve ever read in this genre. Regression-themed novels are already a flooded trope, but this one blows the rest out of the water purely from how many layers it stacks on top of itself and still manages to come out narratively clean. When I first got into this series (via the webtoon, like most people), the wait between weekly releases drove me up the wall,\n", - "Total characters: 8578\n" - ] - } - ], - "source": [ - "import requests\n", - "from langchain_core.documents import Document\n", - "\n", - "response = requests.get(\"https://viswamedha.com/api/post/a-story-for-one-reader/\")\n", - "data = response.json()\n", - "content = data['content']\n", - "\n", - "docs = [Document(page_content=content, metadata={\"source\": response.url})]\n", - "\n", - "assert len(docs) == 1\n", - "print(docs[0].page_content[:500])\n", - "print(f\"Total characters: {len(docs[0].page_content)}\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "82bcfabc", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Split blog post into 13 sub-documents.\n" - ] - } - ], - "source": [ - "\n", - "text_splitter = RecursiveCharacterTextSplitter(\n", - " chunk_size=1000, # chunk size (characters)\n", - " chunk_overlap=200, # chunk overlap (characters)\n", - " add_start_index=True, # track index in original document\n", - ")\n", - "all_splits = text_splitter.split_documents(docs)\n", - "\n", - "print(f\"Split blog post into {len(all_splits)} sub-documents.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "2ee1a9ca", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['19e6412c-7407-4c73-ba24-f47fe1ffe7e2', 'df94988a-8837-464c-8809-ed86343ffd8b', '2456d12c-a077-41d4-85c6-f79b9056109b']\n" - ] - } - ], - "source": [ - "document_ids = vector_store.add_documents(documents=all_splits)\n", - "\n", - "print(document_ids[:3])" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "a9096893", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "@tool(response_format=\"content_and_artifact\")\n", - "def retrieve_context(query: str):\n", - " \"\"\"Retrieve information to help answer a query.\"\"\"\n", - " retrieved_docs = vector_store.similarity_search(query, k=2)\n", - " serialized = \"\\n\\n\".join(\n", - " (f\"Source: {doc.metadata}\\nContent: {doc.page_content}\")\n", - " for doc in retrieved_docs\n", - " )\n", - " return serialized, retrieved_docs" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "dff2345d", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "tools = [retrieve_context]\n", - "prompt = (\n", - " \"You have access to a tool that retrieves context from a blog post. \"\n", - " \"Use the tool to help answer user queries.\"\n", - ")\n", - "agent = create_agent(model, tools, system_prompt=prompt)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "aaa2fad9", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "================================\u001b[1m Human Message \u001b[0m=================================\n", - "\n", - "What is the significance of the second loop?\n", - "\n", - "Use the retrieved context to provide a detailed answer.\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "Tool Calls:\n", - " retrieve_context (b746e923-2761-4be8-ae23-c0b3698972ac)\n", - " Call ID: b746e923-2761-4be8-ae23-c0b3698972ac\n", - " Args:\n", - " query: Significance of the second loop\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "Tool Calls:\n", - " retrieve_context (b746e923-2761-4be8-ae23-c0b3698972ac)\n", - " Call ID: b746e923-2761-4be8-ae23-c0b3698972ac\n", - " Args:\n", - " query: Significance of the second loop\n", - "=================================\u001b[1m Tool Message \u001b[0m=================================\n", - "Name: retrieve_context\n", - "\n", - "Source: {'source': 'https://viswamedha.com/api/post/a-story-for-one-reader/', 'start_index': 3377}\n", - "Content: And this is where the paradox really hits. The Great Plotter, while observing regressions and chasing a better ending, ends up **creating the very timeline** he’s been watching. In trying to fix his own story, he triggers a new one. He unknowingly causes the very events that lead to KDJ’s worldline existing in the first place. It's absolutely wild. He becomes the most influential figure in this timeline, yet completely powerless to interact with it directly (due to the constraints of Probability). All he can do is watch as KDJ lives through the story he thought he already knew.\n", - "\n", - "---\n", - "\n", - "## What is the second paradox, and where does the loop begin?\n", - "\n", - "Source: {'start_index': 32858, 'source': 'https://lilianweng.github.io/posts/2023-06-23-agent/'}\n", - "Content: }\n", - "]\n", - "Then after these clarification, the agent moved into the code writing mode with a different system message.\n", - "System message:\n", - "=================================\u001b[1m Tool Message \u001b[0m=================================\n", - "Name: retrieve_context\n", - "\n", - "Source: {'source': 'https://viswamedha.com/api/post/a-story-for-one-reader/', 'start_index': 3377}\n", - "Content: And this is where the paradox really hits. The Great Plotter, while observing regressions and chasing a better ending, ends up **creating the very timeline** he’s been watching. In trying to fix his own story, he triggers a new one. He unknowingly causes the very events that lead to KDJ’s worldline existing in the first place. It's absolutely wild. He becomes the most influential figure in this timeline, yet completely powerless to interact with it directly (due to the constraints of Probability). All he can do is watch as KDJ lives through the story he thought he already knew.\n", - "\n", - "---\n", - "\n", - "## What is the second paradox, and where does the loop begin?\n", - "\n", - "Source: {'start_index': 32858, 'source': 'https://lilianweng.github.io/posts/2023-06-23-agent/'}\n", - "Content: }\n", - "]\n", - "Then after these clarification, the agent moved into the code writing mode with a different system message.\n", - "System message:\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n" - ] - } - ], - "source": [ - "query = (\n", - " \"What is the significance of the second loop?\\n\\n\"\n", - " \"Use the retrieved context to provide a detailed answer.\"\n", - ")\n", - "\n", - "for event in agent.stream(\n", - " {\"messages\": [{\"role\": \"user\", \"content\": query}]},\n", - " stream_mode=\"values\",\n", - "):\n", - " event[\"messages\"][-1].pretty_print()" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "bda6d7d0", - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "\n", - "@dynamic_prompt\n", - "def prompt_with_context(request: ModelRequest) -> str:\n", - " \"\"\"Inject context into state messages.\"\"\"\n", - " last_query = request.state[\"messages\"][-1].text\n", - " retrieved_docs = vector_store.similarity_search(last_query)\n", - "\n", - " docs_content = \"\\n\\n\".join(doc.page_content for doc in retrieved_docs)\n", - "\n", - " system_message = (\n", - " \"You are a helpful assistant. Use the following context in your response:\"\n", - " f\"\\n\\n{docs_content}\"\n", - " )\n", - "\n", - " return system_message\n", - "\n", - "\n", - "agent = create_agent(model, tools=[], middleware=[prompt_with_context])" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "1540855c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "================================\u001b[1m Human Message \u001b[0m=================================\n", - "\n", - "What is the significance of the second loop?\n", - "\n", - "\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "\n", - "The second paradox highlights the self-fulfilling nature of the narrative and Kim Dokja's unique role within it.\n", - "\n", - "Here's the significance:\n", - "\n", - "* **Kim Dokja as the Catalyst:** The \"second loop\" isn't about a repeated cycle of events in the traditional sense. Instead, it's about Kim Dokja's existence and actions *creating* the very timeline he's trying to navigate. He's the \"Great Plotter\" who, in his attempts to alter or understand the story, inadvertently causes the events that lead to the existence of the worldline he's observing.\n", - "* **The Unwritten Becoming the Author:** The paradox lies in how someone who was never part of the original story (*TWSA*) becomes its central figure, then its overseer, and eventually something akin to a god. His obsession with the novel and his subsequent involvement in the scenarios *are* the genesis of that specific reality.\n", - "* **The Power of Observation and Intervention:** The \"Great Plotter\" is trapped in a unique position. He can observe the events he set in motion, even chase a \"better ending,\" but his direct interaction is limited by \"Probability.\" This means he's a profoundly influential figure who is simultaneously powerless to directly change the course of the story he created. He can only watch as Kim Dokja lives through the narrative.\n", - "* **The Genesis of Kim Dokja's Worldline:** The loop begins with Kim Dokja's transition from a reader in our world to the protagonist of the scenarios. His reading of the novel and the subsequent beginning of the scenarios in his reality are the foundational events. The \"Great Plotter's\" actions, in turn, ensure that this specific worldline, with Kim Dokja at its center, comes into being.\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "\n", - "The second paradox highlights the self-fulfilling nature of the narrative and Kim Dokja's unique role within it.\n", - "\n", - "Here's the significance:\n", - "\n", - "* **Kim Dokja as the Catalyst:** The \"second loop\" isn't about a repeated cycle of events in the traditional sense. Instead, it's about Kim Dokja's existence and actions *creating* the very timeline he's trying to navigate. He's the \"Great Plotter\" who, in his attempts to alter or understand the story, inadvertently causes the events that lead to the existence of the worldline he's observing.\n", - "* **The Unwritten Becoming the Author:** The paradox lies in how someone who was never part of the original story (*TWSA*) becomes its central figure, then its overseer, and eventually something akin to a god. His obsession with the novel and his subsequent involvement in the scenarios *are* the genesis of that specific reality.\n", - "* **The Power of Observation and Intervention:** The \"Great Plotter\" is trapped in a unique position. He can observe the events he set in motion, even chase a \"better ending,\" but his direct interaction is limited by \"Probability.\" This means he's a profoundly influential figure who is simultaneously powerless to directly change the course of the story he created. He can only watch as Kim Dokja lives through the narrative.\n", - "* **The Genesis of Kim Dokja's Worldline:** The loop begins with Kim Dokja's transition from a reader in our world to the protagonist of the scenarios. His reading of the novel and the subsequent beginning of the scenarios in his reality are the foundational events. The \"Great Plotter's\" actions, in turn, ensure that this specific worldline, with Kim Dokja at its center, comes into being.\n" - ] - } - ], - "source": [ - "query = \"What is the significance of the second loop?\\n\\n\"\n", - "for step in agent.stream(\n", - " {\"messages\": [{\"role\": \"user\", \"content\": query}]},\n", - " stream_mode=\"values\",\n", - "):\n", - " step[\"messages\"][-1].pretty_print()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.13.9" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b22be8e..0000000 --- a/package-lock.json +++ /dev/null @@ -1,8367 +0,0 @@ -{ - "name": "dynavera", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "dynavera", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@ant-design/icons-vue": "^7.0.1", - "ant-design-vue": "^4.2.6", - "axios": "^1.6.0", - "pinia": "^3.0.4", - "reflect-metadata": "^0.1.13", - "rxjs": "^7.8.0", - "vue": "^3.5.13", - "vue-router": "^4.5.0" - }, - "devDependencies": { - "@eslint/js": "^9.8.0", - "@swc-node/register": "~1.9.1", - "@swc/core": "~1.5.7", - "@swc/helpers": "~0.5.11", - "@types/node": "20.19.9", - "@typescript-eslint/parser": "^8.40.0", - "@vitejs/plugin-vue": "^6.0.1", - "@vitest/ui": "^3.0.0", - "@vue/eslint-config-prettier": "7.1.0", - "@vue/eslint-config-typescript": "^14.6.0", - "@vue/test-utils": "^2.4.6", - "eslint": "^9.8.0", - "eslint-config-prettier": "^10.0.0", - "eslint-plugin-vue": "^9.16.1", - "jiti": "2.4.2", - "jsdom": "~22.1.0", - "prettier": "^2.6.2", - "tslib": "^2.3.0", - "typescript": "~5.9.2", - "typescript-eslint": "^8.40.0", - "vite": "^7.0.0", - "vitest": "^3.0.0", - "vue-tsc": "^2.2.8", - "webpack-cli": "^5.1.4" - } - }, - "node_modules/@ant-design/colors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", - "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", - "license": "MIT", - "dependencies": { - "@ctrl/tinycolor": "^3.4.0" - } - }, - "node_modules/@ant-design/icons-svg": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", - "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", - "license": "MIT" - }, - "node_modules/@ant-design/icons-vue": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz", - "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==", - "license": "MIT", - "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-svg": "^4.2.1" - }, - "peerDependencies": { - "vue": ">=3.0.3" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bufbuild/protobuf": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.0.tgz", - "integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==", - "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)", - "optional": true - }, - "node_modules/@ctrl/tinycolor": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", - "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@emotion/hash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", - "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", - "license": "MIT" - }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", - "license": "MIT" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "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/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "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.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "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-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, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "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-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "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", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "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-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, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.29", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", - "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", - "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", - "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", - "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", - "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", - "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", - "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", - "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", - "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", - "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", - "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", - "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", - "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", - "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", - "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", - "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", - "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", - "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", - "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", - "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", - "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", - "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", - "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@simonwep/pickr": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz", - "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", - "license": "MIT", - "dependencies": { - "core-js": "^3.15.1", - "nanopop": "^2.1.0" - } - }, - "node_modules/@swc-node/register": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.9.2.tgz", - "integrity": "sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@swc-node/core": "^1.13.1", - "@swc-node/sourcemap-support": "^0.5.0", - "colorette": "^2.0.20", - "debug": "^4.3.4", - "pirates": "^4.0.6", - "tslib": "^2.6.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.4.13", - "typescript": ">= 4.3" - } - }, - "node_modules/@swc-node/register/node_modules/@swc-node/core": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@swc-node/core/-/core-1.14.1.tgz", - "integrity": "sha512-jrt5GUaZUU6cmMS+WTJEvGvaB6j1YNKPHPzC2PUi2BjaFbtxURHj6641Az6xN7b665hNniAIdvjxWcRml5yCnw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@swc/core": ">= 1.13.3", - "@swc/types": ">= 0.1" - } - }, - "node_modules/@swc-node/sourcemap-support": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", - "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.21", - "tslib": "^2.6.3" - } - }, - "node_modules/@swc-node/sourcemap-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@swc-node/sourcemap-support/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@swc/core": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.29.tgz", - "integrity": "sha512-nvTtHJI43DUSOAf3h9XsqYg8YXKc0/N4il9y4j0xAkO0ekgDNo+3+jbw6MInawjKJF9uulyr+f5bAutTsOKVlw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.8" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.5.29", - "@swc/core-darwin-x64": "1.5.29", - "@swc/core-linux-arm-gnueabihf": "1.5.29", - "@swc/core-linux-arm64-gnu": "1.5.29", - "@swc/core-linux-arm64-musl": "1.5.29", - "@swc/core-linux-x64-gnu": "1.5.29", - "@swc/core-linux-x64-musl": "1.5.29", - "@swc/core-win32-arm64-msvc": "1.5.29", - "@swc/core-win32-ia32-msvc": "1.5.29", - "@swc/core-win32-x64-msvc": "1.5.29" - }, - "peerDependencies": { - "@swc/helpers": "*" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.29.tgz", - "integrity": "sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.29.tgz", - "integrity": "sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.29.tgz", - "integrity": "sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.29.tgz", - "integrity": "sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.29.tgz", - "integrity": "sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.29.tgz", - "integrity": "sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.29.tgz", - "integrity": "sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.29.tgz", - "integrity": "sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.29.tgz", - "integrity": "sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.29.tgz", - "integrity": "sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", - "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@swc/types": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", - "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz", - "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.3.tgz", - "integrity": "sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/type-utils": "8.46.3", - "@typescript-eslint/utils": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.46.3", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.3.tgz", - "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.3.tgz", - "integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.3", - "@typescript-eslint/types": "^8.46.3", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.3.tgz", - "integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz", - "integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.3.tgz", - "integrity": "sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/utils": "8.46.3", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.3.tgz", - "integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz", - "integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.3", - "@typescript-eslint/tsconfig-utils": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "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/@typescript-eslint/utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.3.tgz", - "integrity": "sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.3.tgz", - "integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.3", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vitejs/plugin-vue": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", - "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.29" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/ui": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.2.4.tgz", - "integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@vitest/utils": "3.2.4", - "fflate": "^0.8.2", - "flatted": "^3.3.3", - "pathe": "^2.0.3", - "sirv": "^3.0.1", - "tinyglobby": "^0.2.14", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": "3.2.4" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", - "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.15" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", - "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.15", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", - "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.15", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.24.tgz", - "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.24", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-core/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz", - "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.24", - "@vue/shared": "3.5.24" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz", - "integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.24", - "@vue/compiler-dom": "3.5.24", - "@vue/compiler-ssr": "3.5.24", - "@vue/shared": "3.5.24", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.21", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/@vue/compiler-sfc/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz", - "integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.24", - "@vue/shared": "3.5.24" - } - }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/devtools-kit": { - "version": "7.7.9", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", - "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^7.7.9", - "birpc": "^2.3.0", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.2" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.9", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", - "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", - "license": "MIT", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/eslint-config-prettier": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", - "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^4.0.0" - }, - "peerDependencies": { - "eslint": ">= 7.28.0", - "prettier": ">= 2.0.0" - } - }, - "node_modules/@vue/eslint-config-prettier/node_modules/eslint-config-prettier": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", - "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/@vue/eslint-config-typescript": { - "version": "14.6.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz", - "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^8.35.1", - "fast-glob": "^3.3.3", - "typescript-eslint": "^8.35.1", - "vue-eslint-parser": "^10.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": "^9.10.0", - "eslint-plugin-vue": "^9.28.0 || ^10.0.0", - "typescript": ">=4.8.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/language-core": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", - "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.15", - "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", - "@vue/shared": "^3.5.0", - "alien-signals": "^1.0.3", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.24.tgz", - "integrity": "sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.24" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.24.tgz", - "integrity": "sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.24", - "@vue/shared": "3.5.24" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.24.tgz", - "integrity": "sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.24", - "@vue/runtime-core": "3.5.24", - "@vue/shared": "3.5.24", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.24.tgz", - "integrity": "sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.24", - "@vue/shared": "3.5.24" - }, - "peerDependencies": { - "vue": "3.5.24" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.24.tgz", - "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==", - "license": "MIT" - }, - "node_modules/@vue/test-utils": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", - "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-beautify": "^1.14.9", - "vue-component-type-helpers": "^2.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "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", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/alien-signals": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", - "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "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/ant-design-vue": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.2.6.tgz", - "integrity": "sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==", - "license": "MIT", - "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-vue": "^7.0.0", - "@babel/runtime": "^7.10.5", - "@ctrl/tinycolor": "^3.5.0", - "@emotion/hash": "^0.9.0", - "@emotion/unitless": "^0.8.0", - "@simonwep/pickr": "~1.8.0", - "array-tree-filter": "^2.1.0", - "async-validator": "^4.0.0", - "csstype": "^3.1.1", - "dayjs": "^1.10.5", - "dom-align": "^1.12.1", - "dom-scroll-into-view": "^2.0.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.15", - "resize-observer-polyfill": "^1.5.1", - "scroll-into-view-if-needed": "^2.2.25", - "shallow-equal": "^1.0.0", - "stylis": "^4.1.3", - "throttle-debounce": "^5.0.0", - "vue-types": "^3.0.0", - "warning": "^4.0.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ant-design-vue" - }, - "peerDependencies": { - "vue": ">=3.2.0" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-tree-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==", - "license": "MIT" - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/async-validator": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", - "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.25", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz", - "integrity": "sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/birpc": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", - "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", - "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", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", - "update-browserslist-db": "^1.1.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-builder": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", - "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", - "dev": true, - "license": "MIT/X11", - "optional": true - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001754", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", - "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorjs.io": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", - "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compute-scroll-into-view": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", - "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/core-js": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", - "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "rrweb-cssom": "^0.6.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/data-urls": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", - "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/dayjs": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", - "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", - "license": "MIT" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dom-align": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", - "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==", - "license": "MIT" - }, - "node_modules/dom-scroll-into-view": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", - "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==", - "license": "MIT" - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "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", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/editorconfig": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", - "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@one-ini/wasm": "0.1.1", - "commander": "^10.0.0", - "minimatch": "9.0.1", - "semver": "^7.5.3" - }, - "bin": { - "editorconfig": "bin/editorconfig" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/editorconfig/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/editorconfig/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", - "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/electron-to-chromium": { - "version": "1.5.249", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.249.tgz", - "integrity": "sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.20.0.tgz", - "integrity": "sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==", - "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", - "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", - "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-vue/node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-vue/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-vue/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/expect-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "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", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true, - "license": "MIT" - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "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.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "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/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "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/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "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", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "license": "MIT" - }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "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/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "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/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-beautify": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", - "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", - "dev": true, - "license": "MIT", - "dependencies": { - "config-chain": "^1.1.13", - "editorconfig": "^1.0.4", - "glob": "^10.4.2", - "js-cookie": "^3.0.5", - "nopt": "^7.2.1" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/jsdom": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", - "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", - "decimal.js": "^10.4.3", - "domexception": "^4.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/less": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz", - "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=14" - }, - "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/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "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", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "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/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "license": "MIT" - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "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/nanopop": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.4.2.tgz", - "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", - "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/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pinia": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", - "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^7.7.7" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "typescript": ">=4.5.0", - "vue": "^3.5.11" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/pinia/node_modules/@vue/devtools-api": { - "version": "7.7.9", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", - "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^7.7.9" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "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.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", - "license": "Apache-2.0" - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "license": "MIT" - }, - "node_modules/rollup": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", - "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.2", - "@rollup/rollup-android-arm64": "4.53.2", - "@rollup/rollup-darwin-arm64": "4.53.2", - "@rollup/rollup-darwin-x64": "4.53.2", - "@rollup/rollup-freebsd-arm64": "4.53.2", - "@rollup/rollup-freebsd-x64": "4.53.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", - "@rollup/rollup-linux-arm-musleabihf": "4.53.2", - "@rollup/rollup-linux-arm64-gnu": "4.53.2", - "@rollup/rollup-linux-arm64-musl": "4.53.2", - "@rollup/rollup-linux-loong64-gnu": "4.53.2", - "@rollup/rollup-linux-ppc64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-musl": "4.53.2", - "@rollup/rollup-linux-s390x-gnu": "4.53.2", - "@rollup/rollup-linux-x64-gnu": "4.53.2", - "@rollup/rollup-linux-x64-musl": "4.53.2", - "@rollup/rollup-openharmony-arm64": "4.53.2", - "@rollup/rollup-win32-arm64-msvc": "4.53.2", - "@rollup/rollup-win32-ia32-msvc": "4.53.2", - "@rollup/rollup-win32-x64-gnu": "4.53.2", - "@rollup/rollup-win32-x64-msvc": "4.53.2", - "fsevents": "~2.3.2" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz", - "integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==", - "dev": true, - "license": "MIT", - "optional": true, - "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-embedded": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.93.3.tgz", - "integrity": "sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@bufbuild/protobuf": "^2.5.0", - "buffer-builder": "^0.2.0", - "colorjs.io": "^0.5.0", - "immutable": "^5.0.2", - "rxjs": "^7.4.0", - "supports-color": "^8.1.1", - "sync-child-process": "^1.0.2", - "varint": "^6.0.0" - }, - "bin": { - "sass": "dist/bin/sass.js" - }, - "engines": { - "node": ">=16.0.0" - }, - "optionalDependencies": { - "sass-embedded-all-unknown": "1.93.3", - "sass-embedded-android-arm": "1.93.3", - "sass-embedded-android-arm64": "1.93.3", - "sass-embedded-android-riscv64": "1.93.3", - "sass-embedded-android-x64": "1.93.3", - "sass-embedded-darwin-arm64": "1.93.3", - "sass-embedded-darwin-x64": "1.93.3", - "sass-embedded-linux-arm": "1.93.3", - "sass-embedded-linux-arm64": "1.93.3", - "sass-embedded-linux-musl-arm": "1.93.3", - "sass-embedded-linux-musl-arm64": "1.93.3", - "sass-embedded-linux-musl-riscv64": "1.93.3", - "sass-embedded-linux-musl-x64": "1.93.3", - "sass-embedded-linux-riscv64": "1.93.3", - "sass-embedded-linux-x64": "1.93.3", - "sass-embedded-unknown-all": "1.93.3", - "sass-embedded-win32-arm64": "1.93.3", - "sass-embedded-win32-x64": "1.93.3" - } - }, - "node_modules/sass-embedded-all-unknown": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.93.3.tgz", - "integrity": "sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw==", - "cpu": [ - "!arm", - "!arm64", - "!riscv64", - "!x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "sass": "1.93.3" - } - }, - "node_modules/sass-embedded-android-arm": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.93.3.tgz", - "integrity": "sha512-8xOw9bywfOD6Wv24BgCmgjkk6tMrsOTTHcb28KDxeJtFtoxiUyMbxo0vChpPAfp2Hyg2tFFKS60s0s4JYk+Raw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-arm64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.93.3.tgz", - "integrity": "sha512-uqUl3Kt1IqdGVAcAdbmC+NwuUJy8tM+2ZnB7/zrt6WxWVShVCRdFnWR9LT8HJr7eJN7AU8kSXxaVX/gedanPsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-riscv64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.93.3.tgz", - "integrity": "sha512-2jNJDmo+3qLocjWqYbXiBDnfgwrUeZgZFHJIwAefU7Fn66Ot7rsXl+XPwlokaCbTpj7eMFIqsRAZ/uDueXNCJg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-android-x64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.93.3.tgz", - "integrity": "sha512-y0RoAU6ZenQFcjM9PjQd3cRqRTjqwSbtWLL/p68y2oFyh0QGN0+LQ826fc0ZvU/AbqCsAizkqjzOn6cRZJxTTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-darwin-arm64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.93.3.tgz", - "integrity": "sha512-7zb/hpdMOdKteK17BOyyypemglVURd1Hdz6QGsggy60aUFfptTLQftLRg8r/xh1RbQAUKWFbYTNaM47J9yPxYg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-darwin-x64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.93.3.tgz", - "integrity": "sha512-Ek1Vp8ZDQEe327Lz0b7h3hjvWH3u9XjJiQzveq74RPpJQ2q6d9LfWpjiRRohM4qK6o4XOHw1X10OMWPXJtdtWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-arm": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.93.3.tgz", - "integrity": "sha512-yeiv2y+dp8B4wNpd3+JsHYD0mvpXSfov7IGyQ1tMIR40qv+ROkRqYiqQvAOXf76Qwh4Y9OaYZtLpnsPjfeq6mA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-arm64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.93.3.tgz", - "integrity": "sha512-RBrHWgfd8Dd8w4fbmdRVXRrhh8oBAPyeWDTKAWw8ZEmuXfVl4ytjDuyxaVilh6rR1xTRTNpbaA/YWApBlLrrNw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.93.3.tgz", - "integrity": "sha512-fU0fwAwbp7sBE3h5DVU5UPzvaLg7a4yONfFWkkcCp6ZrOiPuGRHXXYriWQ0TUnWy4wE+svsVuWhwWgvlb/tkKg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.93.3.tgz", - "integrity": "sha512-PS829l+eUng+9W4PFclXGb4uA2+965NHV3/Sa5U7qTywjeeUUYTZg70dJHSqvhrBEfCc2XJABeW3adLJbyQYkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.93.3.tgz", - "integrity": "sha512-cK1oBY+FWQquaIGEeQ5H74KTO8cWsSWwXb/WaildOO9U6wmUypTgUYKQ0o5o/29nZbWWlM1PHuwVYTSnT23Jjg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.93.3.tgz", - "integrity": "sha512-A7wkrsHu2/I4Zpa0NMuPGkWDVV7QGGytxGyUq3opSXgAexHo/vBPlGoDXoRlSdex0cV+aTMRPjoGIfdmNlHwyg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-riscv64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.93.3.tgz", - "integrity": "sha512-vWkW1+HTF5qcaHa6hO80gx/QfB6GGjJUP0xLbnAoY4pwEnw5ulGv6RM8qYr8IDhWfVt/KH+lhJ2ZFxnJareisQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-linux-x64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.93.3.tgz", - "integrity": "sha512-k6uFxs+e5jSuk1Y0niCwuq42F9ZC5UEP7P+RIOurIm8w/5QFa0+YqeW+BPWEW5M1FqVOsNZH3qGn4ahqvAEjPA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-unknown-all": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.93.3.tgz", - "integrity": "sha512-o5wj2rLpXH0C+GJKt/VpWp6AnMsCCbfFmnMAttcrsa+U3yrs/guhZ3x55KAqqUsE8F47e3frbsDL+1OuQM5DAA==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "!android", - "!darwin", - "!linux", - "!win32" - ], - "dependencies": { - "sass": "1.93.3" - } - }, - "node_modules/sass-embedded-win32-arm64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.93.3.tgz", - "integrity": "sha512-0dOfT9moy9YmBolodwYYXtLwNr4jL4HQC9rBfv6mVrD7ud8ue2kDbn+GVzj1hEJxvEexVSmDCf7MHUTLcGs9xQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded-win32-x64": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.93.3.tgz", - "integrity": "sha512-wHFVfxiS9hU/sNk7KReD+lJWRp3R0SLQEX4zfOnRP2zlvI2X4IQR5aZr9GNcuMP6TmNpX0nQPZTegS8+h9RrEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/sass-embedded/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/sax": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", - "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "optional": true - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "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", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/scroll-into-view-if-needed": { - "version": "2.2.31", - "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", - "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", - "license": "MIT", - "dependencies": { - "compute-scroll-into-view": "^1.0.20" - } - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sirv": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", - "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "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/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "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": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylis": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", - "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", - "license": "MIT" - }, - "node_modules/superjson": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", - "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", - "license": "MIT", - "dependencies": { - "copy-anything": "^4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/superjson/node_modules/copy-anything": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", - "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", - "license": "MIT", - "dependencies": { - "is-what": "^5.2.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/superjson/node_modules/is-what": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", - "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/sync-child-process": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", - "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "sync-message-port": "^1.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/sync-message-port": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", - "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser": { - "version": "5.44.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", - "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "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/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/throttle-debounce": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", - "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", - "license": "MIT", - "engines": { - "node": ">=12.22" - } - }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.3.tgz", - "integrity": "sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.3", - "@typescript-eslint/parser": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/utils": "8.46.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", - "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", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/vite": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", - "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "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": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.24.tgz", - "integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@vue/compiler-dom": "3.5.24", - "@vue/compiler-sfc": "3.5.24", - "@vue/runtime-dom": "3.5.24", - "@vue/server-renderer": "3.5.24", - "@vue/shared": "3.5.24" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-component-type-helpers": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.12.tgz", - "integrity": "sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue-eslint-parser": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", - "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.6.0", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - } - }, - "node_modules/vue-router": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz", - "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.5.0" - } - }, - "node_modules/vue-tsc": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", - "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "2.4.15", - "@vue/language-core": "2.2.12" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - }, - "node_modules/vue-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz", - "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", - "license": "MIT", - "dependencies": { - "is-plain-object": "3.0.1" - }, - "engines": { - "node": ">=10.15.0" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/vue-types/node_modules/is-plain-object": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", - "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.102.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", - "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.26.3", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", - "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "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/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "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/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "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/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "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/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "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/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true, - "license": "MIT" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index d6ef8c2..0000000 --- a/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "dynavera", - "version": "1.0.0", - "license": "MIT", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "format": "prettier --write --tab-width 4 --use-tabs false \"src/**/*.{ts,vue,js,css}\"" - }, - "private": true, - "dependencies": { - "@ant-design/icons-vue": "^7.0.1", - "ant-design-vue": "^4.2.6", - "axios": "^1.6.0", - "pinia": "^3.0.4", - "reflect-metadata": "^0.1.13", - "rxjs": "^7.8.0", - "vue": "^3.5.13", - "vue-router": "^4.5.0" - }, - "devDependencies": { - "@eslint/js": "^9.8.0", - "@swc-node/register": "~1.9.1", - "@swc/core": "~1.5.7", - "@swc/helpers": "~0.5.11", - "@types/node": "20.19.9", - "@typescript-eslint/parser": "^8.40.0", - "@vitejs/plugin-vue": "^6.0.1", - "@vitest/ui": "^3.0.0", - "@vue/eslint-config-prettier": "7.1.0", - "@vue/eslint-config-typescript": "^14.6.0", - "@vue/test-utils": "^2.4.6", - "eslint": "^9.8.0", - "eslint-config-prettier": "^10.0.0", - "eslint-plugin-vue": "^9.16.1", - "jiti": "2.4.2", - "jsdom": "~22.1.0", - "prettier": "^2.6.2", - "tslib": "^2.3.0", - "typescript": "~5.9.2", - "typescript-eslint": "^8.40.0", - "vite": "^7.0.0", - "vitest": "^3.0.0", - "vue-tsc": "^2.2.8", - "webpack-cli": "^5.1.4" - } -} diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 7bc5375628afbc66c819a8af71f611b1c29942d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44016 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 UA)+2i0{{R307*qoM6N<$f}f$iH2?qr diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png deleted file mode 100644 index 5246034570283decea810e55ba80e0ff79cf11d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352907 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 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png deleted file mode 100644 index 8ddf70a59a99d133712b446f257054c4b0bd0a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP) zT}V_>5XXPlcG-`_hm?veDlh{Pu@u6xz$`2JQdV*!B;9-{w-Akjw(Oy;Fjk_dT?+!s zLQMP6pt8&d$p@t@h>&`SUiz>vD=>Pf*v>iE-Fvr{z{8z6Gyj?S-*aY8Lh>Sa*pRIz z+l-s-*qj9ZyEGB~R|I7GCLqvo*zIh0ts*0Bjw#h_N>bf75g1^tXET8VmE1VzL(_EJ zVYjhn#bR7*m+F;BTw|O-Iz-pIkE6wC(P<})Sg4kki4*54%FZ+Ur*|c zWW0x)=oF;lSRz?JSsX!rPKF3V|D$0(eEvrN<6+zzms7d#6u*A|Q8Cp0Q7eu>6G-c= zKIB!pdInjYpUoEU2}Zw;REiW#h zblox9FAx zkI5>=oIZaROS01qg7dB2G&FT^R~-M@i`N_rw&Oq3hA+^9|7;r}tJt00000NkvXXu0mjf8Rji0 diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png deleted file mode 100644 index bd02ce2df1f8bb10d5007a6bcd2c9a9db00831a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1708 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 -import { computed, onMounted } from 'vue'; -import { Layout, Menu, Button, Space, Typography } from 'ant-design-vue'; -import type { MenuProps } from 'ant-design-vue'; -import { - HomeOutlined, - InfoCircleOutlined, - RocketOutlined, - ReadOutlined, - TeamOutlined, - RobotOutlined, - BulbOutlined, - AppstoreOutlined, - DashboardOutlined, - LoginOutlined, - UserAddOutlined, - BuildOutlined, -} from '@ant-design/icons-vue'; -import { useRoute, useRouter } from 'vue-router'; -import { useAuthStore } from '../stores/authStore'; - -const router = useRouter(); -const route = useRoute(); -const authStore = useAuthStore(); - -const navItems = [ - { - key: '/', - label: 'Home', - icon: HomeOutlined, - path: '/', - }, - { - key: '/about', - label: 'About', - icon: InfoCircleOutlined, - path: '/about', - }, - { - key: '/onboarding', - label: 'Onboarding', - icon: RocketOutlined, - path: '/onboarding', - }, - { - key: '/training', - label: 'Training', - icon: ReadOutlined, - path: '/training', - }, - { - key: '/roles', - label: 'Roles', - icon: TeamOutlined, - path: '/roles', - roles: ['manager', 'admin'], - }, - { - key: '/agents', - label: 'Agents', - icon: RobotOutlined, - path: '/agents', - roles: ['manager', 'admin'], - }, - { - key: '/assessments', - label: 'Assessments', - icon: BulbOutlined, - path: '/assessments', - }, - { - key: '/resources', - label: 'Resources', - icon: AppstoreOutlined, - path: '/resources', - }, - { - key: '/progress', - label: 'Progress', - icon: DashboardOutlined, - path: '/progress', - }, - { - key: '/organizations', - label: 'Organizations', - icon: BuildOutlined, - path: '/organizations', - }, -]; - -const visibleNavItems = computed(() => - navItems.filter((item) => - item.roles ? authStore.hasRole(item.roles) : true - ) -); - -const selectedKeys = computed(() => { - const match = visibleNavItems.value.find((item) => { - if (item.key === '/') return route.path === '/'; - return route.path.startsWith(item.key); - }); - return match ? [match.key] : []; -}); - -const onSelect: MenuProps['onSelect'] = ({ key }) => { - const item = visibleNavItems.value.find((n) => n.key === key); - if (item) { - if (route.path !== item.path) { - router.push(item.path); - } - } -}; - -const handleLogout = async () => { - await authStore.logout(); - router.push('/'); -}; - -onMounted(() => { - authStore.fetchSession(); -}); - - - - - diff --git a/src/lib/api.ts b/src/lib/api.ts deleted file mode 100644 index 7c15ba7..0000000 --- a/src/lib/api.ts +++ /dev/null @@ -1,77 +0,0 @@ -import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; - -class ApiClient { - private client: AxiosInstance; - - constructor() { - this.client = axios.create({ withCredentials: true }); - } - - private getCsrfToken(): string { - let cookieValue = ''; - if (document.cookie && document.cookie !== '') { - const cookies = document.cookie.split(';'); - for (let i = 0; i < cookies.length; i++) { - const cookie = cookies[i].trim(); - if (cookie.substring(0, 10) === 'csrftoken=') { - cookieValue = decodeURIComponent(cookie.substring(10)); - break; - } - } - } - return cookieValue; - } - - private withCsrf(config?: AxiosRequestConfig): AxiosRequestConfig { - const token = this.getCsrfToken(); - const csrfHeader = token ? { 'X-CSRFToken': token } : {}; - return { - ...config, - headers: { - ...csrfHeader, - ...(config?.headers || {}), - }, - }; - } - - get( - url: string, - config?: AxiosRequestConfig - ): Promise> { - return this.client.get(url, this.withCsrf(config)); - } - - post( - url: string, - data?: unknown, - config?: AxiosRequestConfig - ): Promise> { - return this.client.post(url, data, this.withCsrf(config)); - } - - put( - url: string, - data?: unknown, - config?: AxiosRequestConfig - ): Promise> { - return this.client.put(url, data, this.withCsrf(config)); - } - - patch( - url: string, - data?: unknown, - config?: AxiosRequestConfig - ): Promise> { - return this.client.patch(url, data, this.withCsrf(config)); - } - - delete( - url: string, - config?: AxiosRequestConfig - ): Promise> { - return this.client.delete(url, this.withCsrf(config)); - } -} - -export const apiClient = new ApiClient(); -export { isAxiosError } from 'axios'; diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index 59383ee..0000000 --- a/src/main.ts +++ /dev/null @@ -1,11 +0,0 @@ -import './styles.css'; -import 'ant-design-vue/dist/reset.css'; -import router from './router'; -import { createApp } from 'vue'; -import { createPinia } from 'pinia'; -import App from './app/App.vue'; - -const app = createApp(App); -app.use(createPinia()); -app.use(router); -app.mount('#root'); diff --git a/src/router/index.ts b/src/router/index.ts deleted file mode 100644 index c0d2828..0000000 --- a/src/router/index.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router'; -import { useAuthStore } from '../stores/authStore'; -import { message } from 'ant-design-vue'; - -const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes: [ - { - path: '/', - name: 'home', - component: () => import('../views/HomeView.vue'), - }, - { - path: '/about', - name: 'about', - component: () => import('../views/AboutView.vue'), - }, - { - path: '/login', - name: 'login', - component: () => import('../views/LoginView.vue'), - meta: { guestOnly: true }, - }, - { - path: '/register', - name: 'register', - component: () => import('../views/RegisterView.vue'), - meta: { guestOnly: true }, - }, - { - path: '/onboarding', - name: 'onboarding', - component: () => import('../views/OnboardingFlow.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/training/:moduleId?', - name: 'training', - component: () => import('../views/TrainingModule.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/agents', - name: 'agents', - component: () => import('../views/Agents.vue'), - meta: { requiresAuth: true, roles: ['manager', 'admin'] }, - }, - { - path: '/agents/:id', - name: 'agent-detail', - component: () => import('../views/AgentDetail.vue'), - meta: { requiresAuth: true, roles: ['manager', 'admin'] }, - }, - { - path: '/roles', - name: 'roles', - component: () => import('../views/RoleProfiles.vue'), - meta: { requiresAuth: true, roles: ['manager', 'admin'] }, - }, - { - path: '/progress', - name: 'progress', - component: () => import('../views/ProgressDashboard.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/assessments', - name: 'assessments', - component: () => import('../views/Assessments.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/resources', - name: 'resources', - component: () => import('../views/Resources.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/organizations/:id', - name: 'organization-view', - component: () => import('../views/OrganizationView.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/organizations/:id/manage', - name: 'organization-manage', - component: () => import('../views/OrganizationManage.vue'), - meta: { requiresAuth: true }, - }, - { - path: '/invite/:token', - name: 'invite-accept', - component: () => import('../views/InviteAccept.vue'), - meta: { requiresAuth: true }, - }, - ], -}); - -export default router; - -router.beforeEach(async (to, _from, next) => { - const authStore = useAuthStore(); - - try { - await authStore.fetchSession(); - } catch (err) { - console.error('Failed to fetch session during navigation:', err); - } - - const isAuthed = authStore.isAuthenticated; - const role = authStore.user?.role; - - if (to.meta?.guestOnly && isAuthed) { - return next({ path: '/onboarding' }); - } - - if (to.meta?.requiresAuth && !isAuthed) { - return next({ path: '/login', query: { redirect: to.fullPath } }); - } - - const allowedRoles = (to.meta?.roles as string[] | undefined) || null; - if (allowedRoles && (!role || !allowedRoles.includes(role))) { - message.error('You do not have access to that page'); - return next({ path: '/' }); - } - - return next(); -}); diff --git a/src/stores/agentStore.ts b/src/stores/agentStore.ts deleted file mode 100644 index dbd81fa..0000000 --- a/src/stores/agentStore.ts +++ /dev/null @@ -1,271 +0,0 @@ -import { defineStore } from 'pinia'; -import { ref, computed } from 'vue'; - -interface AgentEvent { - type: string; - content?: string | Record; - message?: string; - timestamp: Date; - event_type?: string; - error_message?: string; - execution_id?: string; - output_data?: Record; -} - -export const useAgentStore = defineStore('agent', () => { - const socket = ref(null); - const isConnected = ref(false); - const currentExecutionId = ref(null); - const events = ref([]); - const executionStatus = ref('idle'); - const agentId = ref(null); - const reconnectAttempts = ref(0); - const maxReconnectAttempts = 5; - - const connect = (agentIdParam: string) => { - console.log( - '[agentStore] connect() called with agent ID:', - agentIdParam - ); - - if (socket.value && isConnected.value) { - console.log( - '[agentStore] Already connected to agent:', - agentIdParam - ); - return; - } - - agentId.value = agentIdParam; - const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - const wsUrl = `${protocol}//${window.location.host}/ws/agents/${agentIdParam}/`; - console.log('[agentStore] WebSocket URL:', wsUrl); - - socket.value = new WebSocket(wsUrl); - console.log('[agentStore] WebSocket object created'); - - socket.value.onopen = () => { - isConnected.value = true; - reconnectAttempts.value = 0; - console.log( - '[agentStore] SUCCESS - WebSocket connected to agent:', - agentIdParam - ); - console.log('[agentStore] isConnected is now:', isConnected.value); - }; - - socket.value.onmessage = (event) => { - console.log('[agentStore] Message received from WebSocket'); - try { - const data = JSON.parse(event.data); - console.log('[agentStore] Parsed message:', data); - handleMessage(data); - } catch (error) { - console.error( - '[agentStore] ERROR - Failed to parse WebSocket message:', - error - ); - console.error('[agentStore] Raw message:', event.data); - } - }; - - socket.value.onerror = (error) => { - console.error( - '[agentStore] ERROR - WebSocket error occurred:', - error - ); - isConnected.value = false; - }; - - socket.value.onclose = () => { - isConnected.value = false; - console.log( - '[agentStore] WebSocket closed for agent:', - agentIdParam - ); - attemptReconnect(agentIdParam); - }; - }; - - const attemptReconnect = (agentIdParam: string) => { - console.log('[agentStore] attemptReconnect() called'); - - if (reconnectAttempts.value < maxReconnectAttempts) { - reconnectAttempts.value++; - const delay = Math.min( - 1000 * Math.pow(2, reconnectAttempts.value), - 10000 - ); - console.log( - `[agentStore] Attempting to reconnect... (attempt ${reconnectAttempts.value}/${maxReconnectAttempts}, delay: ${delay}ms)` - ); - setTimeout(() => connect(agentIdParam), delay); - } else { - console.error( - '[agentStore] ERROR - Max reconnection attempts reached (${maxReconnectAttempts})' - ); - } - }; - - const handleMessage = (data: Record) => { - console.log( - '[agentStore] handleMessage() called with type:', - data.type - ); - console.log('[agentStore] Full message data:', data); - - if (data.type === 'connection') { - console.log('[agentStore] Connection message:', data.message); - } else if (data.type === 'execution_started') { - console.log('[agentStore] Execution started'); - currentExecutionId.value = data.execution_id as string; - executionStatus.value = 'running'; - events.value = []; - console.log( - '[agentStore] Status changed to: running, execution ID:', - currentExecutionId.value - ); - events.value.push({ - type: 'started', - message: data.message as string, - timestamp: new Date(), - }); - } else if (data.type === 'agent_event') { - console.log('[agentStore] Agent event received:', data.event_type); - events.value.push({ - type: data.event_type as string, - content: data.content as string | Record, - timestamp: new Date(data.timestamp as string), - }); - } else if (data.type === 'execution_completed') { - console.log('[agentStore] Execution completed'); - executionStatus.value = 'completed'; - events.value.push({ - type: 'completed', - content: data.output_data as Record, - message: data.message as string, - timestamp: new Date(), - }); - } else if (data.type === 'execution_error') { - console.log('[agentStore] Execution error:', data.error_message); - executionStatus.value = 'failed'; - events.value.push({ - type: 'error', - message: data.error_message as string, - timestamp: new Date(), - }); - } else if (data.type === 'execution_stopped') { - console.log('[agentStore] Execution stopped'); - executionStatus.value = 'stopped'; - events.value.push({ - type: 'stopped', - message: data.message as string, - timestamp: new Date(), - }); - } else if (data.type === 'error') { - console.log('[agentStore] Generic error:', data.message); - events.value.push({ - type: 'error', - message: data.message as string, - timestamp: new Date(), - }); - } else { - console.warn( - '[agentStore] WARNING - Unknown message type:', - data.type - ); - } - }; - - const startAgent = (inputData: Record = {}) => { - console.log('[agentStore] startAgent() called with data:', inputData); - - if (!socket.value) { - console.error('[agentStore] ERROR - WebSocket not initialized'); - return; - } - - if (!isConnected.value) { - console.error( - '[agentStore] ERROR - WebSocket not connected (isConnected:', - isConnected.value, - ')' - ); - return; - } - - try { - const message = { - action: 'start_agent', - input_data: inputData, - }; - console.log('[agentStore] Sending message:', message); - socket.value.send(JSON.stringify(message)); - console.log('[agentStore] SUCCESS - Message sent to WebSocket'); - } catch (error) { - console.error( - '[agentStore] ERROR - Failed to send WebSocket message:', - error - ); - } - }; - - const stopAgent = () => { - console.log('[agentStore] stopAgent() called'); - - if (!socket.value) { - console.error('[agentStore] ERROR - WebSocket not initialized'); - return; - } - - if (!isConnected.value) { - console.error('[agentStore] ERROR - WebSocket not connected'); - return; - } - - try { - const message = { - action: 'stop_agent', - execution_id: currentExecutionId.value, - }; - console.log('[agentStore] Sending message:', message); - socket.value.send(JSON.stringify(message)); - console.log( - '[agentStore] SUCCESS - Stop message sent to WebSocket' - ); - } catch (error) { - console.error( - '[agentStore] ERROR - Failed to send stop message:', - error - ); - } - }; - - const disconnect = () => { - console.log('[agentStore] disconnect() called'); - reconnectAttempts.value = maxReconnectAttempts; - - if (socket.value) { - console.log('[agentStore] Closing WebSocket connection'); - socket.value.close(); - console.log('[agentStore] WebSocket close initiated'); - } else { - console.warn('[agentStore] WARNING - No WebSocket to disconnect'); - } - }; - - const eventLog = computed(() => events.value); - - return { - socket, - isConnected, - currentExecutionId, - executionStatus, - agentId, - eventLog, - connect, - startAgent, - stopAgent, - disconnect, - }; -}); diff --git a/src/stores/authStore.ts b/src/stores/authStore.ts deleted file mode 100644 index e676a05..0000000 --- a/src/stores/authStore.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { computed, ref } from 'vue'; -import { defineStore } from 'pinia'; -import { apiClient, isAxiosError } from '../lib/api'; - -export interface AuthUser { - id: number; - uuid: string; - email_address: string; - first_name: string; - last_name: string; - bio?: string; - timezone?: string; - avatar_url?: string; - role?: string; - date_of_birth?: string; - created_at?: string; - updated_at?: string; -} - -interface SessionResponse { - isAuthenticated: boolean; - isStaff: boolean; -} - -export const useAuthStore = defineStore('auth', () => { - const user = ref(null); - const loading = ref(false); - const initialized = ref(false); - const error = ref(null); - - const isAuthenticated = computed(() => Boolean(user.value)); - const hasRole = (roles: string[] = []) => { - if (!roles.length) return true; - return roles.includes(user.value?.role || ''); - }; - const displayName = computed(() => { - if (!user.value) return ''; - if (user.value.first_name || user.value.last_name) { - return `${user.value.first_name || ''} ${ - user.value.last_name || '' - }`.trim(); - } - return user.value.email_address; - }); - - const setUser = (value: AuthUser | null) => { - user.value = value; - initialized.value = true; - }; - - const fetchSession = async (force = false) => { - if (initialized.value && !force) return user.value; - loading.value = true; - error.value = null; - try { - const sessionRes = await apiClient.get( - '/api/user/session/' - ); - if (sessionRes.data?.isAuthenticated) { - const meRes = await apiClient.get('/api/user/me/'); - setUser(meRes.data); - } else { - setUser(null); - } - return user.value; - } catch (err) { - error.value = isAxiosError(err) - ? err.response?.data?.detail || err.message - : 'Unable to fetch session'; - setUser(null); - throw err; - } finally { - loading.value = false; - } - }; - - const login = async (emailAddress: string, password: string) => { - loading.value = true; - error.value = null; - try { - const res = await apiClient.post<{ - user: AuthUser; - message?: string; - }>('/api/user/login/', { email_address: emailAddress, password }); - setUser(res.data?.user ?? null); - return res.data; - } catch (err) { - error.value = isAxiosError(err) - ? err.response?.data?.error || - err.response?.data?.detail || - err.message - : 'Login failed'; - throw err; - } finally { - loading.value = false; - } - }; - - const register = async (payload: { - email_address: string; - password: string; - confirm_password?: string; - first_name: string; - last_name: string; - date_of_birth?: string; - role?: string; - }) => { - loading.value = true; - error.value = null; - try { - await apiClient.post('/api/user/signup/', { - ...payload, - confirm_password: payload.confirm_password || payload.password, - }); - await login(payload.email_address, payload.password); - } catch (err) { - error.value = isAxiosError(err) - ? err.response?.data?.detail || - err.response?.data?.error || - err.message - : 'Registration failed'; - throw err; - } finally { - loading.value = false; - } - }; - - const logout = async () => { - loading.value = true; - error.value = null; - try { - await apiClient.post('/api/user/logout/'); - } catch (err) { - error.value = isAxiosError(err) - ? err.response?.data?.detail || - err.response?.data?.error || - err.message - : 'Logout failed'; - throw err; - } finally { - setUser(null); - loading.value = false; - } - }; - - return { - user, - loading, - initialized, - error, - isAuthenticated, - hasRole, - displayName, - fetchSession, - login, - register, - logout, - }; -}); diff --git a/src/styles.css b/src/styles.css deleted file mode 100644 index 19c75e2..0000000 --- a/src/styles.css +++ /dev/null @@ -1,44 +0,0 @@ -html { - -webkit-text-size-adjust: 100%; - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, - 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, - 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', - 'Noto Color Emoji'; - line-height: 1.5; - tab-size: 4; - scroll-behavior: smooth; -} -body { - font-family: inherit; - line-height: inherit; - margin: 0; - background: #0b1220; - color: #e5e7eb; -} -h1, -h2, -p, -pre { - margin: 0; -} -*, -::before, -::after { - box-sizing: border-box; - border-width: 0; - border-style: solid; - border-color: currentColor; -} -h1, -h2 { - font-size: inherit; - font-weight: inherit; -} -a { - color: inherit; - text-decoration: inherit; -} -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, - 'Liberation Mono', 'Courier New', monospace; -} diff --git a/src/views/AboutView.vue b/src/views/AboutView.vue deleted file mode 100644 index 8281958..0000000 --- a/src/views/AboutView.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - diff --git a/src/views/AgentDetail.vue b/src/views/AgentDetail.vue deleted file mode 100644 index 560bd0a..0000000 --- a/src/views/AgentDetail.vue +++ /dev/null @@ -1,411 +0,0 @@ - - - - - diff --git a/src/views/Agents.vue b/src/views/Agents.vue deleted file mode 100644 index 2037215..0000000 --- a/src/views/Agents.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - diff --git a/src/views/Assessments.vue b/src/views/Assessments.vue deleted file mode 100644 index de52c97..0000000 --- a/src/views/Assessments.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue deleted file mode 100644 index 296c5a1..0000000 --- a/src/views/HomeView.vue +++ /dev/null @@ -1,329 +0,0 @@ - - - - - diff --git a/src/views/InviteAccept.vue b/src/views/InviteAccept.vue deleted file mode 100644 index 41e3e3d..0000000 --- a/src/views/InviteAccept.vue +++ /dev/null @@ -1,179 +0,0 @@ - - - - - diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue deleted file mode 100644 index 5cc131f..0000000 --- a/src/views/LoginView.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/src/views/OnboardingFlow.vue b/src/views/OnboardingFlow.vue deleted file mode 100644 index fb73496..0000000 --- a/src/views/OnboardingFlow.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/src/views/OrganizationManage.vue b/src/views/OrganizationManage.vue deleted file mode 100644 index f871131..0000000 --- a/src/views/OrganizationManage.vue +++ /dev/null @@ -1,485 +0,0 @@ - - - - - diff --git a/src/views/OrganizationView.vue b/src/views/OrganizationView.vue deleted file mode 100644 index fabb610..0000000 --- a/src/views/OrganizationView.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - - - diff --git a/src/views/ProgressDashboard.vue b/src/views/ProgressDashboard.vue deleted file mode 100644 index 06d09ae..0000000 --- a/src/views/ProgressDashboard.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - - diff --git a/src/views/RegisterView.vue b/src/views/RegisterView.vue deleted file mode 100644 index 553c71b..0000000 --- a/src/views/RegisterView.vue +++ /dev/null @@ -1,172 +0,0 @@ - - - - - diff --git a/src/views/Resources.vue b/src/views/Resources.vue deleted file mode 100644 index e96591c..0000000 --- a/src/views/Resources.vue +++ /dev/null @@ -1,49 +0,0 @@ - - - - - diff --git a/src/views/RoleProfiles.vue b/src/views/RoleProfiles.vue deleted file mode 100644 index 9cc8bff..0000000 --- a/src/views/RoleProfiles.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/src/views/TrainingModule.vue b/src/views/TrainingModule.vue deleted file mode 100644 index b8910bc..0000000 --- a/src/views/TrainingModule.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/src/vue-shims.d.ts b/src/vue-shims.d.ts deleted file mode 100644 index b0ab4f2..0000000 --- a/src/vue-shims.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.vue' { - import { defineComponent } from 'vue'; - const component: ReturnType; - export default component; -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index e2db6ac..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "rootDir": ".", - "sourceMap": true, - "declaration": false, - "moduleResolution": "node", - "module": "esnext", - "target": "es2015", - "jsx": "preserve", - "jsxImportSource": "vue", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "resolveJsonModule": true, - "allowJs": true, - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "types": ["vite/client"], - "baseUrl": ".", - "paths": {}, - "outDir": "./build/out-tsc", - "lib": ["es2020", "dom"] - }, - "include": [ - "src/**/*.js", - "src/**/*.jsx", - "src/**/*.ts", - "src/**/*.vue" - ], - "exclude": [ - "node_modules", - "tmp", - "src/**/*.spec.ts", - "src/**/*.test.ts", - "src/**/*.spec.vue", - "src/**/*.test.vue" - ] -} diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index 3ce794e..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// -import { defineConfig } from 'vite'; -import vue from '@vitejs/plugin-vue'; - -export default defineConfig(() => ({ - root: __dirname, - cacheDir: './node_modules/.vite/build', - server: { - port: 5173, - host: 'localhost', - }, - preview: { - port: 4300, - host: 'localhost', - }, - plugins: [vue()], - build: { - outDir: './build', - emptyOutDir: true, - reportCompressedSize: true, - commonjsOptions: { - transformMixedEsModules: true, - }, - }, -}));

Ev~O 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�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 aszVIX|yG_kkT(9nd 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