From 2d878b55737904b39be588cbc106a9b835c526ca Mon Sep 17 00:00:00 2001 From: Sambhawana Date: Wed, 9 Apr 2025 03:31:15 +0530 Subject: [PATCH] Node.js backend server and riva-frontend app for testing --- .gitignore | 19 + app-backend/README.md | 362 + app-backend/download-protos.js | 98 + app-backend/package-lock.json | 1911 +++ app-backend/package.json | 35 + app-backend/server.js | 463 + app-backend/test-asr.js | 88 + app-backend/tests/README.md | 97 + app-backend/tests/direct-riva-test.js | 228 + app-backend/tests/run-all-tests.sh | 92 + app-backend/tests/samples/test.wav | Bin 0 -> 219246 bytes app-backend/tests/test-asr.js | 121 + app-backend/tests/test-streaming.js | 180 + app-backend/tests/test-wav-file.js | 155 + riva-frontend/.gitignore | 23 + riva-frontend/README.md | 91 + riva-frontend/package-lock.json | 14990 +++++++++++++++++++++++ riva-frontend/package.json | 47 + riva-frontend/public/index.html | 43 + riva-frontend/src/App.css | 269 + riva-frontend/src/App.tsx | 837 ++ riva-frontend/src/index.css | 13 + riva-frontend/src/index.tsx | 13 + riva-frontend/src/logo.svg | 1 + riva-frontend/src/react-app-env.d.ts | 1 + riva-frontend/src/riva-client-lib.d.ts | 133 + riva-frontend/src/types.ts | 40 + riva-frontend/tsconfig.json | 26 + 28 files changed, 20376 insertions(+) create mode 100644 app-backend/README.md create mode 100755 app-backend/download-protos.js create mode 100644 app-backend/package-lock.json create mode 100644 app-backend/package.json create mode 100644 app-backend/server.js create mode 100644 app-backend/test-asr.js create mode 100644 app-backend/tests/README.md create mode 100644 app-backend/tests/direct-riva-test.js create mode 100755 app-backend/tests/run-all-tests.sh create mode 100644 app-backend/tests/samples/test.wav create mode 100644 app-backend/tests/test-asr.js create mode 100644 app-backend/tests/test-streaming.js create mode 100644 app-backend/tests/test-wav-file.js create mode 100644 riva-frontend/.gitignore create mode 100644 riva-frontend/README.md create mode 100644 riva-frontend/package-lock.json create mode 100644 riva-frontend/package.json create mode 100644 riva-frontend/public/index.html create mode 100644 riva-frontend/src/App.css create mode 100644 riva-frontend/src/App.tsx create mode 100644 riva-frontend/src/index.css create mode 100644 riva-frontend/src/index.tsx create mode 100644 riva-frontend/src/logo.svg create mode 100644 riva-frontend/src/react-app-env.d.ts create mode 100644 riva-frontend/src/riva-client-lib.d.ts create mode 100644 riva-frontend/src/types.ts create mode 100644 riva-frontend/tsconfig.json diff --git a/.gitignore b/.gitignore index 2194d4ab..8910f565 100644 --- a/.gitignore +++ b/.gitignore @@ -186,3 +186,22 @@ tests/integration/tts/outputs riva/client/proto/*_pb2.py riva/client/proto/*_pb2_grpc.py + +# Downloaded/generated proto files and repositories +app-backend/common/ +app-backend/riva/proto/ + +# Node.js specific ignores for app-backend +app-backend/node_modules/ +app-backend/coverage/ +app-backend/.nyc_output/ +app-backend/logs/ +app-backend/*.log +app-backend/.env +app-backend/.env.local +app-backend/.env.development.local +app-backend/.env.test.local +app-backend/.env.production.local +app-backend/npm-debug.log* +app-backend/yarn-debug.log* +app-backend/yarn-error.log* diff --git a/app-backend/README.md b/app-backend/README.md new file mode 100644 index 00000000..332662f1 --- /dev/null +++ b/app-backend/README.md @@ -0,0 +1,362 @@ +# Riva App Backend + +This is a Node.js proxy server that connects to the Riva API server. It provides API endpoints for automatic speech recognition (ASR) and text-to-speech (TTS) services. + +## Features + +- Direct connection to Riva server using official proto files +- ASR (Automatic Speech Recognition) endpoint +- TTS (Text-to-Speech) endpoint +- WAV file support with header analysis and proper processing +- Configurable via environment variables +- WebSocket support for real-time streaming recognition + +## Setup + +1. Ensure you have Node.js installed (v14 or higher recommended) + +2. Install dependencies: + ``` + npm install + ``` + +3. Download the proto files: + ``` + npm run download-protos + ``` + This script will clone the nvidia-riva/common repository and copy the necessary proto files to the `riva/proto` directory. + +## Configuration + +Create a `.env` file in the root directory with the following variables: + +``` +PORT=3002 +RIVA_API_URL=localhost:50051 +``` + +- `PORT`: The port on which the proxy server will run +- `RIVA_API_URL`: The URL of the Riva API server + +## Running the Server + +Start the server: + +``` +npm start +``` + +This will automatically run the `download-protos` script before starting the server if the proto files are not already present. + +## Testing the Application + +### Prerequisites + +Before testing: +1. Ensure the Riva API server is running at the configured URL +2. Verify that the proto files have been downloaded successfully +3. Make sure the Node.js server is running (check for "Server listening on port 3002" message) +4. Have sample audio files available for testing + +### Testing the API Endpoints Directly + +#### Testing the Health Endpoint + +```bash +curl http://localhost:3002/health +``` + +Expected response: +```json +{ + "status": "ok", + "services": { + "asr": { + "available": true + }, + "tts": { + "available": true + } + } +} +``` + +#### Testing ASR with a WAV File + +You can use the included test script: + +```bash +# If you have a sample WAV file +node test-asr.js /path/to/your/audio.wav +``` + +Or test manually with curl: + +```bash +# Convert WAV to base64 first +base64 -w 0 /path/to/your/audio.wav > audio.b64 + +# Send the request +curl -X POST http://localhost:3002/api/recognize \ + -H "Content-Type: application/json" \ + -d @- << EOF +{ + "audio": "$(cat audio.b64)", + "config": { + "encoding": "LINEAR_PCM", + "sampleRateHertz": 16000, + "languageCode": "en-US", + "enableAutomaticPunctuation": true + } +} +EOF +``` + +### Testing with the Frontend + +The best way to test the complete functionality is using the provided frontend application: + +1. Start this backend server +2. Start the Riva frontend application +3. Use the frontend to upload audio files or test streaming recognition + +### Debugging and Log Information + +The server provides detailed logging for audio processing. When processing WAV files, it will: + +1. Log detection of WAV headers +2. Display information about: + - Sample rate + - Number of channels + - Bits per sample + - Audio format + +When issues occur, check the console output for detailed error messages. + +## Troubleshooting Proto Files Download + +If you encounter issues downloading proto files: + +1. Check your internet connection +2. Verify that git is installed and accessible +3. Look for specific errors in the console output +4. Make sure the `riva_common.proto` file is included in the filter (the download script now includes this file) +5. Try running the download script manually: + ``` + node download-protos.js + ``` +6. If problems persist, you can manually clone the repository and copy the proto files: + ``` + git clone https://github.com/nvidia-riva/common.git + mkdir -p riva/proto + cp common/riva/proto/*.proto riva/proto/ + ``` + +## API Endpoints + +### Status + +- **GET** `/health` + - Returns the status of the ASR and TTS services + +### Speech Recognition (ASR) + +- **POST** `/api/recognize` + - Request body: + ```json + { + "audio": "", + "config": { + "encoding": "LINEAR_PCM", + "sampleRateHertz": 16000, + "languageCode": "en-US", + "maxAlternatives": 1, + "enableAutomaticPunctuation": true, + "audioChannelCount": 1 + } + } + ``` + - Response: + ```json + { + "results": [ + { + "alternatives": [ + { + "transcript": "recognized text", + "confidence": 0.98 + } + ] + } + ], + "text": "recognized text", + "confidence": 0.98 + } + ``` + +### WebSocket Streaming (ASR) + +- **WebSocket** `/streaming/asr` + - First message (config): + ```json + { + "sampleRate": 16000, + "encoding": "LINEAR_PCM", + "languageCode": "en-US", + "maxAlternatives": 1, + "enableAutomaticPunctuation": true + } + ``` + - Subsequent messages: Binary audio data (16-bit PCM) + - Server responses: + ```json + { + "results": [ + { + "alternatives": [ + { + "transcript": "recognized text" + } + ] + } + ], + "isPartial": true|false + } + ``` + +## Integrating with a New Frontend Application + +If you want to create a new frontend application that uses this backend server, follow these guidelines: + +### REST API Integration + +1. **Server URL Configuration** + - Configure your frontend to connect to the backend at `http://localhost:3002` (or your custom port) + - Ensure your application can handle CORS if the frontend is hosted on a different domain/port + +2. **Health Check** + - Implement a health check on application startup: + ```javascript + fetch('http://localhost:3002/health') + .then(response => response.json()) + .then(data => { + // Check if services are available + const asrAvailable = data.services.asr.available; + const ttsAvailable = data.services.tts.available; + // Update UI accordingly + }); + ``` + +3. **File Upload for Speech Recognition** + - Read the audio file as ArrayBuffer + - Convert to base64 + - Send to the `/api/recognize` endpoint: + ```javascript + // Example in JavaScript + const fileReader = new FileReader(); + fileReader.onload = async (event) => { + const arrayBuffer = event.target.result; + const base64Audio = arrayBufferToBase64(arrayBuffer); + + const response = await fetch('http://localhost:3002/api/recognize', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + audio: base64Audio, + config: { + encoding: 'LINEAR_PCM', + sampleRateHertz: 16000, + languageCode: 'en-US', + enableAutomaticPunctuation: true + } + }) + }); + + const result = await response.json(); + // Process transcription result + }; + fileReader.readAsArrayBuffer(audioFile); + + // Helper function to convert ArrayBuffer to base64 + function arrayBufferToBase64(buffer) { + let binary = ''; + const bytes = new Uint8Array(buffer); + for (let i = 0; i < bytes.byteLength; i++) { + binary += String.fromCharCode(bytes[i]); + } + return window.btoa(binary); + } + ``` + +### WebSocket Integration for Streaming ASR + +1. **Create WebSocket Connection** + ```javascript + const ws = new WebSocket('ws://localhost:3002/streaming/asr'); + ``` + +2. **Send Configuration on Connection** + ```javascript + ws.onopen = () => { + const config = { + sampleRate: 16000, + encoding: 'LINEAR_PCM', + languageCode: 'en-US', + maxAlternatives: 1, + enableAutomaticPunctuation: true + }; + ws.send(JSON.stringify(config)); + }; + ``` + +3. **Capture and Send Audio** + ```javascript + // Assuming you have access to audio data as Int16Array + // This could be from a microphone input or processed audio data + function sendAudioChunk(audioData) { + if (ws.readyState === WebSocket.OPEN) { + ws.send(audioData.buffer); + } + } + ``` + +4. **Process Recognition Results** + ```javascript + ws.onmessage = (event) => { + const response = JSON.parse(event.data); + if (response.results && response.results.length > 0) { + const result = response.results[0]; + if (result.alternatives && result.alternatives.length > 0) { + const transcript = result.alternatives[0].transcript; + const isPartial = response.isPartial; + // Update UI with transcript + // Treat partial results differently from final results + } + } + }; + ``` + +5. **Handle Errors and Connection Close** + ```javascript + ws.onerror = (error) => { + console.error('WebSocket error:', error); + // Show error in UI + }; + + ws.onclose = (event) => { + console.log(`WebSocket closed with code ${event.code}`); + // Handle reconnection or update UI + }; + ``` + +### CORS Considerations + +The backend server is configured to allow cross-origin requests. If you encounter CORS issues: + +1. Ensure the backend is properly configured with CORS headers +2. Check that your frontend is using the correct protocol (http/https) +3. Avoid mixing secure and insecure contexts + +### Example Implementation + +For a complete example of frontend integration, refer to the companion `riva-frontend` repository, which demonstrates both file upload and streaming implementations. \ No newline at end of file diff --git a/app-backend/download-protos.js b/app-backend/download-protos.js new file mode 100755 index 00000000..1765a0e9 --- /dev/null +++ b/app-backend/download-protos.js @@ -0,0 +1,98 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +// Paths for proto files and repositories +const SCRIPT_DIR = __dirname; +const COMMON_DIR = path.join(SCRIPT_DIR, 'common'); +const PROTO_DIR = path.join(SCRIPT_DIR, 'riva/proto'); + +console.log('Proto file downloader script'); +console.log(`Script directory: ${SCRIPT_DIR}`); +console.log(`Common repository target: ${COMMON_DIR}`); +console.log(`Proto files target: ${PROTO_DIR}`); + +// Create directories if they don't exist +[COMMON_DIR, PROTO_DIR].forEach(dir => { + if (!fs.existsSync(dir)) { + console.log(`Creating directory: ${dir}`); + fs.mkdirSync(dir, { recursive: true }); + } +}); + +// Function to download proto files from nvidia-riva/common repository +function downloadProtoFiles() { + try { + console.log('Checking for existing proto files...'); + + // Check if proto directory already contains proto files + if (fs.existsSync(path.join(PROTO_DIR, 'riva_asr.proto')) && + fs.existsSync(path.join(PROTO_DIR, 'riva_tts.proto'))) { + console.log('Proto files already exist in proto directory, skipping download'); + return true; + } + + // Check if common repository is already cloned + const commonRepoExists = fs.existsSync(path.join(COMMON_DIR, '.git')); + + if (!commonRepoExists) { + console.log('Cloning nvidia-riva/common repository...'); + execSync(`git clone https://github.com/nvidia-riva/common.git ${COMMON_DIR}`, { + stdio: 'inherit' + }); + } else { + console.log('Common repository already exists, pulling latest changes...'); + execSync(`cd ${COMMON_DIR} && git pull`, { + stdio: 'inherit' + }); + } + + // Check if the riva/proto directory exists in the cloned repo + const rivaProtoPath = path.join(COMMON_DIR, 'riva', 'proto'); + if (!fs.existsSync(rivaProtoPath)) { + console.error(`Error: Expected directory not found: ${rivaProtoPath}`); + return false; + } + + // Copy proto files to our proto directory + console.log('Copying proto files to proto directory...'); + const protoFiles = fs.readdirSync(rivaProtoPath); + + // Filter for relevant proto files (ASR and TTS) + const relevantProtos = protoFiles.filter(file => + file.includes('riva_asr') || file.includes('riva_tts') || file.includes('riva_audio') || file.includes('riva_common') + ); + + if (relevantProtos.length === 0) { + console.error('No relevant proto files found in the repository'); + return false; + } + + // Copy each proto file + relevantProtos.forEach(file => { + const sourcePath = path.join(rivaProtoPath, file); + const targetPath = path.join(PROTO_DIR, file); + fs.copyFileSync(sourcePath, targetPath); + console.log(`Copied: ${file}`); + }); + + console.log('Successfully downloaded and copied proto files'); + console.log('Available proto files:'); + fs.readdirSync(PROTO_DIR).forEach(file => { + console.log(`- ${file}`); + }); + + return true; + } catch (error) { + console.error('Failed to download proto files:', error); + return false; + } +} + +// Execute the download function +const success = downloadProtoFiles(); + +// Exit with appropriate code +process.exit(success ? 0 : 1); \ No newline at end of file diff --git a/app-backend/package-lock.json b/app-backend/package-lock.json new file mode 100644 index 00000000..561c5c43 --- /dev/null +++ b/app-backend/package-lock.json @@ -0,0 +1,1911 @@ +{ + "name": "riva-app-backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "riva-app-backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@grpc/grpc-js": "^1.6.7", + "@grpc/proto-loader": "^0.6.13", + "axios": "^1.8.4", + "cors": "^2.8.5", + "dotenv": "^16.0.1", + "express": "^4.18.1", + "google-protobuf": "^3.21.4", + "morgan": "^1.10.0", + "nvidia-riva-client": "file:../riva-ts-client", + "ws": "^8.9.0" + }, + "devDependencies": { + "nodemon": "^2.0.22" + } + }, + "../riva-ts-client": { + "name": "nvidia-riva-client", + "version": "2.18.0-rc0", + "license": "MIT", + "dependencies": { + "@grpc/grpc-js": "^1.8.0", + "@grpc/proto-loader": "^0.7.10", + "commander": "^9.4.1", + "google-protobuf": "^3.21.2", + "mic": "^2.1.2", + "node-wav": "^0.0.2", + "node-wav-player": "^0.2.0", + "pino": "^8.17.2", + "rxjs": "^7.8.1", + "wavefile": "^11.0.0", + "winston": "^3.11.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3.0.0", + "@types/google-protobuf": "^3.15.12", + "@types/jest": "^29.5.11", + "@types/node": "^20.17.28", + "@types/node-wav": "^0.0.2", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "@vitest/coverage-v8": "^1.6.0", + "eslint": "^8.56.0", + "jest": "^29.7.0", + "prettier": "^3.2.4", + "protoc-gen-ts": "^0.8.7", + "rimraf": "^5.0.5", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.2", + "ts-proto": "^1.181.2", + "typescript": "^5.3.3", + "vitest": "^1.6.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz", + "integrity": "sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/grpc-js/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/grpc-js/node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, + "node_modules/@grpc/grpc-js/node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@grpc/grpc-js/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/grpc-js/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", + "license": "Apache-2.0", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^6.11.3", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "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.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "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/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.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/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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==", + "license": "MIT" + }, + "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/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/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "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/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "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/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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-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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/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/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "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-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/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + }, + "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/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "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/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.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/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "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": "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/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/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/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nvidia-riva-client": { + "resolved": "../riva-ts-client", + "link": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "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/protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.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==", + "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==", + "license": "MIT" + }, + "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", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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==", + "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/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + } + } +} diff --git a/app-backend/package.json b/app-backend/package.json new file mode 100644 index 00000000..40598f8b --- /dev/null +++ b/app-backend/package.json @@ -0,0 +1,35 @@ +{ + "name": "riva-app-backend", + "version": "1.0.0", + "description": "Proxy server for connecting riva-frontend with riva-ts-client", + "main": "server.js", + "scripts": { + "download-protos": "node download-protos.js", + "prestart": "npm run download-protos", + "start": "node server.js", + "debug": "node debug-client.js", + "install-client": "cd ../riva-ts-client && npm install && npm run build && cd ../app-backend && npm link ../riva-ts-client" + }, + "keywords": [ + "riva", + "proxy", + "grpc" + ], + "author": "", + "license": "ISC", + "dependencies": { + "@grpc/grpc-js": "^1.6.7", + "@grpc/proto-loader": "^0.6.13", + "axios": "^1.8.4", + "cors": "^2.8.5", + "dotenv": "^16.0.1", + "express": "^4.18.1", + "google-protobuf": "^3.21.4", + "morgan": "^1.10.0", + "nvidia-riva-client": "file:../riva-ts-client", + "ws": "^8.9.0" + }, + "devDependencies": { + "nodemon": "^2.0.22" + } +} diff --git a/app-backend/server.js b/app-backend/server.js new file mode 100644 index 00000000..f4f7d079 --- /dev/null +++ b/app-backend/server.js @@ -0,0 +1,463 @@ +require('dotenv').config(); +const express = require('express'); +const cors = require('cors'); +const morgan = require('morgan'); +const grpc = require('@grpc/grpc-js'); +const protoLoader = require('@grpc/proto-loader'); +const fs = require('fs'); +const path = require('path'); +const WebSocket = require('ws'); +const http = require('http'); + +const app = express(); +const PORT = process.env.PORT || 3002; +const serverUrl = process.env.RIVA_API_URL || 'localhost:50051'; + +console.log(`Connecting to Riva server at: ${serverUrl}`); + +// Define paths to proto files +const PROTO_DIR = path.join(__dirname, 'riva/proto'); +const ASR_PROTO_PATH = path.join(PROTO_DIR, 'riva_asr.proto'); + +// Check if proto files exist +if (!fs.existsSync(ASR_PROTO_PATH)) { + console.error('ASR proto file is missing! Please run "npm run download-protos" first.'); + process.exit(1); +} + +console.log(`Using proto files from: ${PROTO_DIR}`); + +// Create gRPC clients from the proto definitions +let asrClient = null; +let serviceStatus = { + asr: { available: false, error: null } +}; + +try { + // Load the ASR proto definition + console.log('Loading ASR proto from:', ASR_PROTO_PATH); + const asrProtoDefinition = protoLoader.loadSync(ASR_PROTO_PATH, { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true, + includeDirs: [path.join(__dirname, 'proto'), path.join(__dirname, 'common')] + }); + + // Create the ASR client + console.log('Creating ASR client...'); + const asrProto = grpc.loadPackageDefinition(asrProtoDefinition); + asrClient = new asrProto.nvidia.riva.asr.RivaSpeechRecognition( + serverUrl, + grpc.credentials.createInsecure() + ); + serviceStatus.asr.available = true; + + console.log('Successfully connected to Riva server'); +} catch (error) { + console.error(`Failed to initialize Riva client: ${error}`); + serviceStatus.asr.error = error.message; +} + +// Set up Express middleware +app.use(cors({ + origin: '*', // Allow all origins for testing purposes + methods: ['GET', 'POST'], + allowedHeaders: ['Content-Type'], + credentials: true +})); +app.use(express.json({ limit: '50mb' })); +app.use(morgan('dev')); + +// API routes +app.get('/', (req, res) => { + res.json({ + message: 'Riva ASR Proxy Server is running', + serviceStatus, + serverUrl: serverUrl, + mode: 'Direct connection to Riva server using downloaded proto files' + }); +}); + +// Add health check endpoint +app.get('/health', (req, res) => { + console.log('Health check request received'); + res.json({ + status: 'ok', + message: 'Riva ASR Proxy Server is healthy', + timestamp: new Date().toISOString(), + serviceStatus + }); +}); + +// Helper function to examine WAV header +function examineWavHeader(buffer) { + // Check if buffer is long enough to contain a WAV header + if (buffer.length < 44) return null; + + // Check for RIFF and WAVE headers + const riff = buffer.slice(0, 4).toString(); + const wave = buffer.slice(8, 12).toString(); + + if (riff !== 'RIFF' || wave !== 'WAVE') { + console.log('Not a valid WAV file:', { riff, wave }); + return null; + } + + // Get format code + const formatCode = buffer.readUInt16LE(20); + + // Get sample rate + const sampleRate = buffer.readUInt32LE(24); + + // Get number of channels + const numChannels = buffer.readUInt16LE(22); + + // Get bits per sample + const bitsPerSample = buffer.readUInt16LE(34); + + // Find data chunk + let dataOffset = -1; + for (let i = 36; i < buffer.length - 4; i++) { + if (buffer.slice(i, i + 4).toString() === 'data') { + dataOffset = i + 8; // data + 4 bytes size + break; + } + } + + return { + formatCode, + sampleRate, + numChannels, + bitsPerSample, + dataOffset + }; +} + +app.post('/api/recognize', async (req, res) => { + if (!serviceStatus.asr.available) { + return res.status(503).json({ + error: 'ASR service unavailable', + details: serviceStatus.asr.error + }); + } + + try { + const { audio, config = {} } = req.body; + + if (!audio) { + return res.status(400).json({ error: 'No audio data provided' }); + } + + console.log('Received ASR request:', { + audioLength: audio.length, + configParams: Object.keys(config) + }); + + // Convert base64 to buffer + const audioBuffer = Buffer.from(audio, 'base64'); + console.log(`Decoded audio buffer length: ${audioBuffer.length} bytes`); + + // Check if it's a WAV file and get its properties + const wavHeader = examineWavHeader(audioBuffer); + + if (wavHeader) { + console.log('WAV file properties:', { + formatCode: wavHeader.formatCode, + sampleRate: wavHeader.sampleRate, + numChannels: wavHeader.numChannels, + bitsPerSample: wavHeader.bitsPerSample, + dataOffset: wavHeader.dataOffset + }); + } else { + console.log('Not a WAV file or could not parse header'); + } + + // Prepare recognition config + const recognitionConfig = { + encoding: config.encoding || (wavHeader ? 'LINEAR_PCM' : 'LINEAR_PCM'), + sample_rate_hertz: config.sampleRateHertz || (wavHeader ? wavHeader.sampleRate : 16000), + language_code: config.languageCode || 'en-US', + max_alternatives: config.maxAlternatives || 1, + enable_automatic_punctuation: config.enableAutomaticPunctuation !== false, + audio_channel_count: config.audioChannelCount || (wavHeader ? wavHeader.numChannels : 1) + }; + + console.log('Using recognition config:', recognitionConfig); + + // Extract audio data from WAV if needed + let audioData = audioBuffer; + if (wavHeader && wavHeader.dataOffset > 0) { + audioData = audioBuffer.slice(wavHeader.dataOffset); + console.log(`Extracted ${audioData.length} bytes of audio data from WAV file`); + } + + // Send the recognition request + asrClient.Recognize( + { + config: recognitionConfig, + audio: audioData + }, + (err, response) => { + if (err) { + console.error('ASR recognition error:', err); + return res.status(500).json({ + error: 'Failed to process audio', + details: err.message + }); + } + + console.log('Received ASR response'); + + // Process the results + const results = response.results || []; + const alternatives = results.length > 0 ? results[0].alternatives || [] : []; + const transcript = alternatives.length > 0 ? alternatives[0].transcript : ''; + const confidence = alternatives.length > 0 ? alternatives[0].confidence : 0; + + res.json({ + results: results.map(result => ({ + alternatives: result.alternatives.map(alt => ({ + transcript: alt.transcript, + confidence: alt.confidence + })) + })), + text: transcript, + confidence + }); + } + ); + } catch (error) { + console.error('Error in ASR endpoint:', error); + res.status(500).json({ + error: 'Internal server error', + details: error.message + }); + } +}); + +// Create an HTTP server and wrap the Express app +const server = http.createServer(app); + +// Create a WebSocket server +// Map the WebSocket path to match client expectation +const wss = new WebSocket.Server({ + server, + path: '/streaming/asr' +}); + +console.log(`WebSocket server initialized at path: /streaming/asr`); + +// Set up WebSocket connection for streaming recognition +wss.on('connection', (ws, req) => { + console.log('Client connected to streaming ASR from:', req.socket.remoteAddress); + + // Create streaming call when client connects + let call = null; + let isFirstMessage = true; + let sampleRate = 16000; // Default sample rate + let receivedAudioSize = 0; + let audioChunks = 0; + let lastLogTime = Date.now(); + + ws.on('message', async (message) => { + try { + // Log occasional processing information + const now = Date.now(); + if (now - lastLogTime > 5000) { // Log every 5 seconds + console.log(`Streaming stats: ${audioChunks} chunks, total ${receivedAudioSize} bytes, avg chunk size: ${audioChunks > 0 ? Math.round(receivedAudioSize/audioChunks) : 0} bytes`); + lastLogTime = now; + } + + // Check if ASR service is available + if (!serviceStatus.asr.available) { + console.error('ASR service unavailable during streaming'); + ws.send(JSON.stringify({ error: 'ASR service unavailable' })); + ws.close(); + return; + } + + // If this is a configuration message (first message) + if (isFirstMessage) { + try { + const config = JSON.parse(message.toString()); + console.log('Received config for streaming recognition:', config); + + sampleRate = config.sampleRate || 16000; + const encoding = config.encoding || 'LINEAR_PCM'; + + // Initialize streaming call + console.log('Initializing streaming recognition call to Riva server'); + call = asrClient.StreamingRecognize(); + + // Handle responses from the server + call.on('data', (response) => { + console.log('Streaming recognition response:', + response.results ? + `${response.results.length} results, is_final: ${response.results[0]?.is_final}` : + 'No results'); + + if (response.results && response.results.length > 0 && + response.results[0].alternatives && + response.results[0].alternatives.length > 0) { + console.log('Transcript:', response.results[0].alternatives[0].transcript); + } + + // Format the response for the frontend + // Make sure each result has an alternatives array with transcript + const formattedResults = response.results?.map(result => { + // Log the structure of the incoming result + console.log('Raw Riva result structure:', JSON.stringify(result)); + + // Create a properly formatted result with alternatives array + return { + alternatives: result.alternatives?.map(alt => ({ + transcript: alt.transcript || '', + confidence: alt.confidence || 0 + })) || [], + is_final: result.is_final + }; + }) || []; + + // Send response to client + if (ws.readyState === ws.OPEN) { + ws.send(JSON.stringify({ + results: formattedResults, + isPartial: response.results && response.results.length > 0 ? + !response.results[0].is_final : true + })); + } + }); + + call.on('error', (err) => { + console.error('Streaming recognition error:', err); + if (ws.readyState === ws.OPEN) { + ws.send(JSON.stringify({ error: err.message })); + } + }); + + call.on('end', () => { + console.log('Streaming recognition ended'); + }); + + // Send initial configuration message + console.log('Sending streaming config to Riva server', { + encoding, + sampleRate, + languageCode: "en-US" + }); + + call.write({ + streaming_config: { + config: { + encoding: encoding, + sample_rate_hertz: sampleRate, + language_code: "en-US", + max_alternatives: 1, + enable_automatic_punctuation: true + }, + interim_results: true + } + }); + + isFirstMessage = false; + console.log('Configuration complete, ready to process audio'); + } catch (err) { + console.error('Error processing config message:', err); + ws.send(JSON.stringify({ error: 'Invalid configuration message' })); + ws.close(); + } + } else { + // This is an audio data message + if (call) { + // Check message type and convert to appropriate buffer + let audioData; + + // Handle different message types for maximum compatibility + if (Buffer.isBuffer(message)) { + audioData = message; + console.log(`Received audio buffer, size: ${message.length} bytes`); + } else if (message instanceof ArrayBuffer || ArrayBuffer.isView(message)) { + // Handle ArrayBuffer or typed array view (Int16Array, etc.) + audioData = Buffer.from(message); + console.log(`Received ArrayBuffer, size: ${audioData.length} bytes`); + } else if (typeof message === 'string') { + // Try to parse as JSON if it's a string + try { + const parsedMessage = JSON.parse(message); + if (parsedMessage.audio) { + audioData = Buffer.from(parsedMessage.audio, 'base64'); + console.log(`Received JSON with base64 audio, decoded size: ${audioData.length} bytes`); + } else { + audioData = Buffer.from(message, 'base64'); + console.log(`Received base64 string, decoded size: ${audioData.length} bytes`); + } + } catch (e) { + // If not valid JSON, assume it's a base64 string + audioData = Buffer.from(message, 'base64'); + console.log(`Received base64 string (not JSON), decoded size: ${audioData.length} bytes`); + } + } else { + // If we can't determine the type, log and skip + console.warn(`Received unknown message type: ${typeof message}, skipping`); + return; + } + + // Update tracking stats + receivedAudioSize += audioData.length; + audioChunks++; + + // Log audio data details occasionally + if (audioChunks === 1 || audioChunks % 100 === 0) { + console.log(`Received ${audioChunks} audio chunks, total size: ${receivedAudioSize} bytes`); + } + + // Send audio data to the streaming recognition call + try { + call.write({ + audio_content: audioData + }); + } catch (err) { + console.error('Error sending audio to Riva:', err); + } + } else { + console.warn('Received audio data but no active streaming call exists'); + } + } + } catch (error) { + console.error('Error in WebSocket message handling:', error); + ws.send(JSON.stringify({ error: 'Server error processing audio' })); + } + }); + + // Handle client disconnect + ws.on('close', () => { + console.log('Client disconnected from streaming ASR'); + if (call) { + try { + console.log(`Streaming session ended: processed ${audioChunks} chunks, total ${receivedAudioSize} bytes`); + call.end(); + } catch (err) { + console.error('Error ending streaming call:', err); + } + } + }); + + // Handle errors + ws.on('error', (error) => { + console.error('WebSocket error:', error); + if (call) { + try { + call.end(); + } catch (err) { + console.error('Error ending streaming call:', err); + } + } + }); +}); + +// Start the server +server.listen(PORT, () => { + console.log(`Server running on port ${PORT}`); +}); diff --git a/app-backend/test-asr.js b/app-backend/test-asr.js new file mode 100644 index 00000000..4360f4f3 --- /dev/null +++ b/app-backend/test-asr.js @@ -0,0 +1,88 @@ +const fs = require('fs'); +const path = require('path'); +const axios = require('axios'); + +// Path to the sample wav file +const audioFilePath = '/home/shiralal/Projects/python-clients/data/examples/en-US_sample.wav'; +const serverUrl = 'http://localhost:3002/api/recognize'; + +// Read the WAV file as a binary Buffer +const readWavFile = () => { + console.log(`Reading WAV file: ${audioFilePath}`); + try { + // Check if file exists + if (!fs.existsSync(audioFilePath)) { + console.error(`File not found: ${audioFilePath}`); + process.exit(1); + } + + const fileData = fs.readFileSync(audioFilePath); + console.log(`Successfully read WAV file (${fileData.length} bytes)`); + return fileData; + } catch (error) { + console.error(`Error reading file: ${error.message}`); + process.exit(1); + } +}; + +// Send the audio data to the server +const sendAudioRequest = async (audioData) => { + try { + console.log('Sending WAV file to ASR endpoint...'); + + // Convert the Buffer to an array for JSON serialization + const audioArray = Array.from(new Uint8Array(audioData)); + + // Prepare request payload + const payload = { + audio: audioArray, + config: { + encoding: 'LINEAR_PCM', + sampleRateHertz: 16000, + languageCode: 'en-US', + maxAlternatives: 1, + enableAutomaticPunctuation: true, + enableWordTimeOffsets: false + } + }; + + console.log('Request config:', payload.config); + console.log(`Audio data length: ${audioArray.length} bytes`); + + // Send POST request + const response = await axios.post(serverUrl, payload, { + headers: { + 'Content-Type': 'application/json' + } + }); + + console.log('ASR Response:', JSON.stringify(response.data, null, 2)); + return response.data; + } catch (error) { + console.error('Error sending ASR request:'); + if (error.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + console.error(`Status: ${error.response.status}`); + console.error('Response data:', error.response.data); + } else if (error.request) { + // The request was made but no response was received + console.error('No response received from server'); + } else { + // Something happened in setting up the request that triggered an Error + console.error('Error:', error.message); + } + process.exit(1); + } +}; + +// Main function +const main = async () => { + const audioData = readWavFile(); + await sendAudioRequest(audioData); +}; + +// Run the script +main().catch(error => { + console.error('Unhandled error:', error); +}); \ No newline at end of file diff --git a/app-backend/tests/README.md b/app-backend/tests/README.md new file mode 100644 index 00000000..e048f9ea --- /dev/null +++ b/app-backend/tests/README.md @@ -0,0 +1,97 @@ +# Riva API Test Suite + +This directory contains test scripts for the Riva API integration. + +## Test Files Overview + +- `test-asr.js`: Tests the ASR (Automatic Speech Recognition) endpoint with a WAV file +- `test-streaming.js`: Tests the Streaming ASR WebSocket endpoint with a WAV file +- `test-wav-file.js`: Tests WAV file handling and sends it to the server +- `direct-riva-test.js`: Tests direct communication with the Riva server, bypassing the Node.js API + +## Prerequisites + +- Node.js 14+ installed +- Required npm packages (`ws`, `axios`, `@grpc/grpc-js`, `@grpc/proto-loader`, `tmp`) +- Sample WAV files in the `samples` directory +- Running server (either local development server or production server) + +## Installing Dependencies + +```bash +cd app-backend +npm install ws axios @grpc/grpc-js @grpc/proto-loader tmp +``` + +## Sample Audio Files + +Place your sample WAV files in the `samples` directory. The scripts will default to `samples/test.wav` if no file is specified. + +## Running the Tests + +### Test ASR API + +```bash +cd app-backend +node tests/test-asr.js [path/to/audio.wav] +``` + +### Test Streaming ASR + +```bash +cd app-backend +node tests/test-streaming.js [path/to/audio.wav] +``` + +### Test WAV File Handling + +```bash +cd app-backend +node tests/test-wav-file.js [path/to/audio.wav] +``` + +### Test Direct Riva Communication + +```bash +cd app-backend +node tests/direct-riva-test.js [path/to/audio.wav] +``` + +## Environment Variables + +You can customize the behavior of the test scripts using these environment variables: + +- `SERVER_URL`: URL of the server API (default: `http://localhost:3002/api/recognize`) +- `WS_URL`: WebSocket URL for streaming (default: `ws://localhost:3002/streaming/asr`) +- `RIVA_SERVER`: Address of the Riva server (default: `localhost:50051`) + +Example: +```bash +SERVER_URL=http://production-server/api/recognize node tests/test-asr.js +``` + +## Troubleshooting + +### Common Issues + +1. **Connection Refused**: Make sure the server is running at the expected address +2. **File Not Found**: Ensure the WAV file exists at the specified path +3. **Invalid WAV Format**: Verify that your WAV file is correctly formatted (PCM format is recommended) +4. **Riva Server Errors**: Check that the Riva server is running and accessible + +### WAV File Requirements + +The Riva ASR service works best with these audio specifications: +- Format: PCM (Linear PCM) +- Sample Rate: 16000 Hz (or 44100 Hz) +- Channels: 1 (mono) +- Bit Depth: 16-bit + +## Creating Test WAV Files + +You can create test WAV files using tools like Audacity or convert them using FFmpeg: + +```bash +# Convert any audio file to a Riva-compatible WAV file +ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav +``` \ No newline at end of file diff --git a/app-backend/tests/direct-riva-test.js b/app-backend/tests/direct-riva-test.js new file mode 100644 index 00000000..f0219bc3 --- /dev/null +++ b/app-backend/tests/direct-riva-test.js @@ -0,0 +1,228 @@ +const fs = require('fs'); +const path = require('path'); +const grpc = require('@grpc/grpc-js'); +const protoLoader = require('@grpc/proto-loader'); +const { promisify } = require('util'); +const tmp = require('tmp'); +const { exec } = require('child_process'); + +// Path to the WAV file to test +const wavFilePath = process.argv[2] || path.join(__dirname, 'samples', 'test.wav'); +console.log(`Using WAV file: ${wavFilePath}`); + +// Check if file exists +if (!fs.existsSync(wavFilePath)) { + console.error(`Error: File '${wavFilePath}' does not exist.`); + process.exit(1); +} + +// Create a temporary directory for proto files +const tmpdir = tmp.dirSync({ unsafeCleanup: true }); +console.log(`Created temporary directory: ${tmpdir.name}`); + +// Write a simple ASR proto definition +const asr_proto = ` +syntax = "proto3"; + +package nvidia.riva.asr; + +message RecognitionConfig { + enum AudioEncoding { + ENCODING_UNSPECIFIED = 0; + LINEAR_PCM = 1; + FLAC = 2; + MULAW = 3; + ALAW = 4; + } + + AudioEncoding encoding = 1; + int32 sample_rate_hertz = 2; + string language_code = 3; + int32 max_alternatives = 4; + bool profanity_filter = 5; + string model = 7; + bool enable_automatic_punctuation = 11; + bool enable_word_time_offsets = 12; + bool enable_separate_recognition_per_channel = 13; + int32 audio_channel_count = 14; + bool enable_word_confidence = 15; + bool enable_raw_transcript = 16; + bool enable_speaker_diarization = 17; + int32 diarization_speaker_count = 18; +} + +message RecognitionAudio { + oneof audio_source { + bytes content = 1; + string uri = 2; + } +} + +message SpeechRecognitionAlternative { + string transcript = 1; + float confidence = 2; +} + +message SpeechRecognitionResult { + repeated SpeechRecognitionAlternative alternatives = 1; +} + +message RecognizeResponse { + repeated SpeechRecognitionResult results = 1; +} + +message RecognizeRequest { + RecognitionConfig config = 1; + RecognitionAudio audio = 2; +} + +service RivaSpeechRecognition { + rpc Recognize(RecognizeRequest) returns (RecognizeResponse) {} +} +`; + +fs.writeFileSync(path.join(tmpdir.name, 'asr.proto'), asr_proto); +console.log('Wrote ASR proto definition to temporary directory'); + +// Function to examine WAV header +function examineWavHeader(buffer) { + if (buffer.length < 44) { + console.error('Buffer too small to be a WAV file'); + return null; + } + + // Check for RIFF and WAVE headers + const riff = buffer.slice(0, 4).toString(); + const wave = buffer.slice(8, 12).toString(); + + if (riff !== 'RIFF' || wave !== 'WAVE') { + console.error('Not a valid WAV file:', { riff, wave }); + return null; + } + + // Get format code + const formatCode = buffer.readUInt16LE(20); + + // Get sample rate + const sampleRate = buffer.readUInt32LE(24); + + // Get number of channels + const numChannels = buffer.readUInt16LE(22); + + // Get bits per sample + const bitsPerSample = buffer.readUInt16LE(34); + + // Find data chunk + let dataOffset = -1; + for (let i = 36; i < buffer.length - 4; i++) { + if (buffer.slice(i, i + 4).toString() === 'data') { + dataOffset = i + 8; // data + 4 bytes size + break; + } + } + + return { + formatCode, + sampleRate, + numChannels, + bitsPerSample, + dataOffset + }; +} + +// Main function +async function main() { + try { + // Read the WAV file + console.log(`Reading WAV file: ${wavFilePath}`); + const audioBuffer = fs.readFileSync(wavFilePath); + console.log(`Read ${audioBuffer.length} bytes from file`); + + // Examine the WAV header + const wavInfo = examineWavHeader(audioBuffer); + if (!wavInfo) { + console.error('Could not parse WAV header'); + process.exit(1); + } + + console.log('WAV file info:', wavInfo); + + // Extract audio data (after WAV header) + let audioData; + if (wavInfo.dataOffset > 0) { + audioData = audioBuffer.slice(wavInfo.dataOffset); + console.log(`Extracted ${audioData.length} bytes of audio data`); + } else { + console.error('Could not find data chunk in WAV file'); + process.exit(1); + } + + // Load the proto definition + console.log('Loading proto definition'); + const packageDefinition = protoLoader.loadSync( + path.join(tmpdir.name, 'asr.proto'), + { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true + } + ); + + // Load the package + const rivaSpeechProto = grpc.loadPackageDefinition(packageDefinition).nvidia.riva.asr; + + // Create client + const rivaServerAddress = process.env.RIVA_SERVER || 'localhost:50051'; + console.log(`Connecting to Riva server at: ${rivaServerAddress}`); + const client = new rivaSpeechProto.RivaSpeechRecognition( + rivaServerAddress, + grpc.credentials.createInsecure() + ); + + // Prepare request + const request = { + config: { + encoding: 'LINEAR_PCM', + sample_rate_hertz: wavInfo.sampleRate, + language_code: 'en-US', + max_alternatives: 1, + enable_automatic_punctuation: true + }, + audio: { + content: audioData + } + }; + + console.log('Sending recognition request with config:', request.config); + + // Send request + const recognize = promisify(client.Recognize).bind(client); + const response = await recognize(request); + + console.log('Recognition response:', JSON.stringify(response, null, 2)); + + // Extract transcription + if (response.results && response.results.length > 0) { + if (response.results[0].alternatives && response.results[0].alternatives.length > 0) { + const transcript = response.results[0].alternatives[0].transcript; + console.log('Transcription:', transcript); + } else { + console.log('No alternatives found in response'); + } + } else { + console.log('No results found in response'); + } + + } catch (error) { + console.error('Error:', error); + } finally { + // Clean up temporary directory + tmpdir.removeCallback(); + console.log('Cleaned up temporary directory'); + } +} + +// Run the main function +main(); \ No newline at end of file diff --git a/app-backend/tests/run-all-tests.sh b/app-backend/tests/run-all-tests.sh new file mode 100755 index 00000000..a0988062 --- /dev/null +++ b/app-backend/tests/run-all-tests.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +# Run all Riva API tests +# This script runs all the test files in sequence + +# Change to the app-backend directory +cd "$(dirname "$0")/.." || exit 1 + +# Check for sample WAV file +SAMPLE_WAV="tests/samples/test.wav" +if [ ! -f "$SAMPLE_WAV" ]; then + echo "Error: Sample WAV file not found at $SAMPLE_WAV" + echo "Please place a test.wav file in the tests/samples directory" + exit 1 +fi + +# Define colors for output +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[0;33m' +NC='\033[0m' # No Color + +# Function to run a test and print status +run_test() { + test_file=$1 + test_name=$2 + + echo -e "\n${YELLOW}=======================================${NC}" + echo -e "${YELLOW}Running test: ${test_name}${NC}" + echo -e "${YELLOW}=======================================${NC}\n" + + node "$test_file" "$SAMPLE_WAV" + + if [ $? -eq 0 ]; then + echo -e "\n${GREEN}✓ Test completed: ${test_name}${NC}\n" + return 0 + else + echo -e "\n${RED}✗ Test failed: ${test_name}${NC}\n" + return 1 + fi +} + +# Make sure the server is running +echo -e "${YELLOW}Checking if server is running...${NC}" +curl -s http://localhost:3002/api/health > /dev/null +if [ $? -ne 0 ]; then + echo -e "${RED}Server is not running at http://localhost:3002${NC}" + echo -e "${YELLOW}Starting server in the background...${NC}" + node server.js & + SERVER_PID=$! + sleep 2 + echo -e "${GREEN}Server started with PID: ${SERVER_PID}${NC}" +else + echo -e "${GREEN}Server is already running${NC}" + SERVER_PID="" +fi + +# Track failures +FAILURES=0 + +# Run tests +run_test "tests/test-asr.js" "ASR API Test" +FAILURES=$((FAILURES + $?)) + +run_test "tests/test-wav-file.js" "WAV File Handling Test" +FAILURES=$((FAILURES + $?)) + +run_test "tests/test-streaming.js" "Streaming ASR Test" +FAILURES=$((FAILURES + $?)) + +run_test "tests/direct-riva-test.js" "Direct Riva Communication Test" +FAILURES=$((FAILURES + $?)) + +# Stop server if we started it +if [ -n "$SERVER_PID" ]; then + echo -e "${YELLOW}Stopping server with PID: ${SERVER_PID}${NC}" + kill $SERVER_PID + echo -e "${GREEN}Server stopped${NC}" +fi + +# Display summary +echo -e "\n${YELLOW}=======================================${NC}" +echo -e "${YELLOW}Test Summary${NC}" +echo -e "${YELLOW}=======================================${NC}" + +if [ $FAILURES -eq 0 ]; then + echo -e "${GREEN}All tests passed successfully!${NC}" + exit 0 +else + echo -e "${RED}${FAILURES} test(s) failed${NC}" + exit 1 +fi \ No newline at end of file diff --git a/app-backend/tests/samples/test.wav b/app-backend/tests/samples/test.wav new file mode 100644 index 0000000000000000000000000000000000000000..4ccab51f30cb4ceda590018664851f14b17c1ba9 GIT binary patch literal 219246 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 0) { + const transcript = response.data.results[0].alternatives[0].transcript; + console.log('Transcription:', transcript); + } else { + console.log('No transcription in response'); + } + + } catch (error) { + console.error('Error sending request:', error.message); + if (error.response) { + console.error('Response status:', error.response.status); + console.error('Response data:', error.response.data); + } + } +} + +// Execute the function +sendWavFile(); \ No newline at end of file diff --git a/app-backend/tests/test-streaming.js b/app-backend/tests/test-streaming.js new file mode 100644 index 00000000..e65ac97d --- /dev/null +++ b/app-backend/tests/test-streaming.js @@ -0,0 +1,180 @@ +const WebSocket = require('ws'); +const fs = require('fs'); +const path = require('path'); + +// Path to the WAV file to stream +const wavFilePath = process.argv[2] || path.join(__dirname, 'samples', 'test.wav'); +console.log(`Using WAV file: ${wavFilePath}`); + +// Check if file exists +if (!fs.existsSync(wavFilePath)) { + console.error(`Error: File '${wavFilePath}' does not exist.`); + process.exit(1); +} + +// Function to examine WAV header +function examineWavHeader(buffer) { + if (buffer.length < 44) { + console.error('Buffer too small to be a WAV file'); + return null; + } + + // Check for RIFF and WAVE headers + const riff = buffer.slice(0, 4).toString(); + const wave = buffer.slice(8, 12).toString(); + + if (riff !== 'RIFF' || wave !== 'WAVE') { + console.error('Not a valid WAV file:', { riff, wave }); + return null; + } + + // Get format code + const formatCode = buffer.readUInt16LE(20); + + // Get sample rate + const sampleRate = buffer.readUInt32LE(24); + + // Get number of channels + const numChannels = buffer.readUInt16LE(22); + + // Get bits per sample + const bitsPerSample = buffer.readUInt16LE(34); + + // Find data chunk + let dataOffset = -1; + for (let i = 36; i < buffer.length - 4; i++) { + if (buffer.slice(i, i + 4).toString() === 'data') { + dataOffset = i + 8; // data + 4 bytes size + break; + } + } + + return { + formatCode, + sampleRate, + numChannels, + bitsPerSample, + dataOffset + }; +} + +// Read the WAV file +const audioBuffer = fs.readFileSync(wavFilePath); +console.log(`Read ${audioBuffer.length} bytes from file`); + +// Examine the WAV header +const wavInfo = examineWavHeader(audioBuffer); +if (!wavInfo) { + console.error('Could not parse WAV header'); + process.exit(1); +} + +console.log('WAV file info:', wavInfo); + +// Extract audio data (after WAV header) +let audioData; +if (wavInfo.dataOffset > 0) { + audioData = audioBuffer.slice(wavInfo.dataOffset); + console.log(`Extracted ${audioData.length} bytes of audio data`); +} else { + console.error('Could not find data chunk in WAV file'); + process.exit(1); +} + +// Connect to WebSocket server +const wsUrl = process.env.WS_URL || 'ws://localhost:3002/streaming/asr'; +console.log(`Connecting to WebSocket server at: ${wsUrl}`); +const ws = new WebSocket(wsUrl); + +// Track transcription +let finalTranscript = ''; +let interimTranscript = ''; + +// Handle WebSocket events +ws.on('open', () => { + console.log('WebSocket connection established'); + + // Send configuration + const config = { + sampleRate: wavInfo.sampleRate, + encoding: 'LINEAR_PCM', + languageCode: 'en-US', + maxAlternatives: 1, + enableAutomaticPunctuation: true + }; + + console.log('Sending configuration:', config); + ws.send(JSON.stringify(config)); + + // Simulate streaming by sending chunks of audio data + console.log('Starting to stream audio data...'); + + const CHUNK_SIZE = 1024; // Size of each chunk in bytes + const INTERVAL = 50; // Time between chunks in milliseconds + + let offset = 0; + + const streamInterval = setInterval(() => { + if (offset >= audioData.length) { + clearInterval(streamInterval); + console.log('Finished streaming audio data'); + + // Wait for final results before closing + setTimeout(() => { + ws.close(); + console.log('WebSocket connection closed'); + console.log('Final transcript:', finalTranscript); + }, 2000); + + return; + } + + const chunk = audioData.slice(offset, offset + CHUNK_SIZE); + offset += CHUNK_SIZE; + + // Send audio chunk + ws.send(chunk); + + // Log progress occasionally + if (offset % (CHUNK_SIZE * 20) === 0) { + console.log(`Streamed ${offset} of ${audioData.length} bytes (${Math.round(offset / audioData.length * 100)}%)`); + } + }, INTERVAL); +}); + +ws.on('message', (data) => { + try { + const response = JSON.parse(data.toString()); + + if (response.error) { + console.error('Streaming error:', response.error); + return; + } + + if (response.results && response.results.length > 0) { + const result = response.results[0]; + + if (result.alternatives && result.alternatives.length > 0) { + const transcript = result.alternatives[0].transcript || ''; + + if (!response.isPartial) { + finalTranscript = transcript; + console.log('Final transcript:', finalTranscript); + } else { + interimTranscript = transcript; + console.log('Interim transcript:', interimTranscript); + } + } + } + } catch (error) { + console.error('Error parsing WebSocket message:', error); + } +}); + +ws.on('error', (error) => { + console.error('WebSocket error:', error); +}); + +ws.on('close', (code, reason) => { + console.log(`WebSocket closed with code ${code}${reason ? ': ' + reason : ''}`); +}); \ No newline at end of file diff --git a/app-backend/tests/test-wav-file.js b/app-backend/tests/test-wav-file.js new file mode 100644 index 00000000..f4660886 --- /dev/null +++ b/app-backend/tests/test-wav-file.js @@ -0,0 +1,155 @@ +const fs = require('fs'); +const path = require('path'); +const axios = require('axios'); + +// Path to the WAV file +const wavFilePath = process.argv[2] || path.join(__dirname, 'samples', 'test.wav'); +console.log(`Using WAV file: ${wavFilePath}`); + +// Check if file exists +if (!fs.existsSync(wavFilePath)) { + console.error(`Error: File '${wavFilePath}' does not exist.`); + process.exit(1); +} + +// Function to examine WAV header +function examineWavHeader(buffer) { + if (buffer.length < 44) { + console.error('Buffer too small to be a WAV file'); + return null; + } + + // Check for RIFF and WAVE headers + const riff = buffer.slice(0, 4).toString(); + const wave = buffer.slice(8, 12).toString(); + + if (riff !== 'RIFF' || wave !== 'WAVE') { + console.error('Not a valid WAV file:', { riff, wave }); + return null; + } + + // Get format code + const formatCode = buffer.readUInt16LE(20); + + // Get sample rate + const sampleRate = buffer.readUInt32LE(24); + + // Get number of channels + const numChannels = buffer.readUInt16LE(22); + + // Get bits per sample + const bitsPerSample = buffer.readUInt16LE(34); + + // Find data chunk + let dataOffset = -1; + for (let i = 36; i < buffer.length - 4; i++) { + if (buffer.slice(i, i + 4).toString() === 'data') { + dataOffset = i + 8; // data + 4 bytes size + break; + } + } + + let dataChunkSize = -1; + if (dataOffset > 0) { + // Data chunk size is at offset - 4 (4 bytes) + dataChunkSize = buffer.readUInt32LE(dataOffset - 4); + } + + return { + formatCode, + sampleRate, + numChannels, + bitsPerSample, + dataOffset, + dataChunkSize, + format: formatCodeToString(formatCode) + }; +} + +// Format code to string +function formatCodeToString(formatCode) { + switch(formatCode) { + case 1: return 'PCM'; + case 3: return 'IEEE Float'; + case 6: return 'A-Law'; + case 7: return 'Mu-Law'; + default: return `Unknown (${formatCode})`; + } +} + +// Read the WAV file +console.log(`Loading WAV file: ${wavFilePath}`); +const audioBuffer = fs.readFileSync(wavFilePath); +console.log(`Read ${audioBuffer.length} bytes from file`); + +// Examine the WAV header +const wavInfo = examineWavHeader(audioBuffer); +if (!wavInfo) { + console.error('Could not parse WAV header'); + process.exit(1); +} + +console.log('WAV file info:', wavInfo); + +// Send the WAV file to the server +async function sendWavFile() { + try { + // Extract audio data (after WAV header) + let audioData; + if (wavInfo.dataOffset > 0) { + audioData = audioBuffer.slice(wavInfo.dataOffset); + console.log(`Extracted ${audioData.length} bytes of audio data`); + + if (wavInfo.dataChunkSize > 0 && wavInfo.dataChunkSize !== audioData.length) { + console.warn(`Warning: Data chunk size (${wavInfo.dataChunkSize}) doesn't match extracted data length (${audioData.length})`); + } + } else { + console.error('Could not find data chunk in WAV file'); + process.exit(1); + } + + // Convert audio buffer to base64 + const base64Audio = audioBuffer.toString('base64'); + console.log(`Converted audio to base64 (${base64Audio.length} characters)`); + + // Prepare the request + const requestBody = { + audio: base64Audio, + config: { + encoding: 'LINEAR_PCM', + sampleRateHertz: wavInfo.sampleRate, + languageCode: 'en-US', + maxAlternatives: 1, + enableAutomaticPunctuation: true + } + }; + + console.log('Sending recognition request with config:', requestBody.config); + + // Send the request + const serverUrl = process.env.SERVER_URL || 'http://localhost:3002/api/recognize'; + console.log(`Sending request to: ${serverUrl}`); + + const response = await axios.post(serverUrl, requestBody); + + console.log('Response status:', response.status); + console.log('Response data:', JSON.stringify(response.data, null, 2)); + + if (response.data.results && response.data.results.length > 0) { + const transcript = response.data.results[0].alternatives[0].transcript; + console.log('Transcription:', transcript); + } else { + console.log('No transcription in response'); + } + + } catch (error) { + console.error('Error sending request:', error.message); + if (error.response) { + console.error('Response status:', error.response.status); + console.error('Response data:', error.response.data); + } + } +} + +// Execute the function +sendWavFile(); \ No newline at end of file diff --git a/riva-frontend/.gitignore b/riva-frontend/.gitignore new file mode 100644 index 00000000..4d29575d --- /dev/null +++ b/riva-frontend/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/riva-frontend/README.md b/riva-frontend/README.md new file mode 100644 index 00000000..d35fbcb6 --- /dev/null +++ b/riva-frontend/README.md @@ -0,0 +1,91 @@ +# Riva Speech Recognition Frontend + +This React application provides a user interface for Nvidia Riva's speech recognition services. + +## Features + +- Real-time speech recognition via microphone streaming +- Batch recognition by uploading audio files +- Support for WAV file format +- Visual audio level indicator +- Server connectivity status monitoring + +## Setup and Installation + +1. Ensure you have Node.js installed (v14 or higher recommended) + +2. Install dependencies: + ``` + npm install + ``` + +3. Configure the backend connection: + - The application is configured to connect to a backend server at `http://localhost:3002` + - You can modify the server URL in the `getServerUrl` function in `src/App.tsx` + +## Running the Application + +Start the development server: + +``` +npm start +``` + +The application will be available at [http://localhost:3000](http://localhost:3000). + +## Testing the Application + +### Prerequisites + +Before testing, ensure: +1. The Riva backend server is running (see app-backend README for instructions) +2. Your browser has permission to access the microphone +3. You have sample audio files available for testing (preferably WAV format) + +### Testing File Upload Speech Recognition + +1. Launch the application and wait for the server connection check to complete +2. Verify that the server connection is successful (no red error messages) +3. Click the "Upload Audio File" button +4. Select an audio file from your computer + - Supported formats include WAV, MP3, and other browser-supported audio formats + - For best results, use WAV files with 16kHz sample rate, 16-bit PCM encoding +5. The application will automatically process the file and display the transcription result +6. The transcription will appear in the "Transcription" section below the buttons + +**Note:** WAV files no longer automatically download back to your device when uploading. + +### Testing Real-time Speech Recognition + +1. Launch the application and verify server connection +2. Click the "Start Streaming" button +3. When prompted, allow microphone access in your browser +4. Speak clearly into your microphone +5. Observe the volume indicator to ensure your audio is being picked up +6. Partial transcription results will appear in gray text +7. Final transcription results will appear in black text and be added to the complete transcription +8. Click "Stop Streaming" when finished + +### Troubleshooting + +If you encounter issues: + +1. **Server Connection Problems** + - Ensure the backend server is running at the expected URL + - Check browser console for CORS or network-related errors + - Use the "Retry Connection" button to attempt reconnection + +2. **Microphone Issues** + - Verify microphone permissions in your browser settings + - Check that your microphone is working in other applications + - Ensure no other application is using the microphone + +3. **File Upload Problems** + - Check the file format is supported + - Verify the file isn't corrupted + - Try a different audio file + +4. **Transcription Quality Issues** + - Ensure clear audio with minimal background noise + - For real-time streaming, speak clearly and at a moderate pace + - Position your microphone properly for optimal audio capture diff --git a/riva-frontend/package-lock.json b/riva-frontend/package-lock.json new file mode 100644 index 00000000..6dcc0a1c --- /dev/null +++ b/riva-frontend/package-lock.json @@ -0,0 +1,14990 @@ +{ + "name": "riva-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "riva-frontend", + "version": "0.1.0", + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.80", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "cors": "^2.8.5", + "express": "^4.18.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.2", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.26.5", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-flow": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.26.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.10", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.26.3", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "license": "MIT" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "license": "CC0-1.0" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "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/regexpp": { + "version": "4.12.1", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "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.1.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "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/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "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", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.15", + "license": "MIT", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "license": "MIT", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "16.18.126", + "license": "MIT" + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.20", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.5", + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.0", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "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", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "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", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "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", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "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", + "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", + "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", + "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", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "license": "Apache-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "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/ajv-formats": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.24.4", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001707", + "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/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "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/char-regex": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.41.0", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.41.0", + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.41.0", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "license": "MIT" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "CC0-1.0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "license": "CC0-1.0" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "license": "Apache-2.0" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "license": "MIT" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "license": "BSD-2-Clause" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "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/duplexer": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.128", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.8.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "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/es-shim-unscopables": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.4", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "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-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "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/globals": { + "version": "13.24.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "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/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.21.2", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "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", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "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/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "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-own-enumerable-property-symbols": { + "version": "3.0.2", + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "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", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.9", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "license": "ISC" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "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", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "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/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "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/jake": { + "version": "10.9.2", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.33", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "license": "MIT", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "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/natural-compare": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "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.20", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "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/own-keys": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "license": "BlueOak-1.0.0" + }, + "node_modules/param-case": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "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", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "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.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.7.1", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "license": "CC0-1.0", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "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/raf": { + "version": "3.4.1", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "license": "MIT" + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "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/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.1.0", + "license": "MIT" + }, + "node_modules/react-is": { + "version": "17.0.2", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "license": "ISC" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "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/safe-array-concat": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "license": "CC0-1.0" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "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": { + "version": "8.17.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.4", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "license": "MIT" + }, + "node_modules/spdy": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/stable": { + "version": "0.1.8", + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "license": "MIT" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "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": { + "name": "string-width", + "version": "4.2.3", + "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", + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "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/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "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/node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "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", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "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", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.98.0", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.1", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "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", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "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/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/riva-frontend/package.json b/riva-frontend/package.json new file mode 100644 index 00000000..911dd7e1 --- /dev/null +++ b/riva-frontend/package.json @@ -0,0 +1,47 @@ +{ + "name": "riva-frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.80", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "cors": "^2.8.5", + "express": "^4.18.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/riva-frontend/public/index.html b/riva-frontend/public/index.html new file mode 100644 index 00000000..aa069f27 --- /dev/null +++ b/riva-frontend/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
+ + + diff --git a/riva-frontend/src/App.css b/riva-frontend/src/App.css new file mode 100644 index 00000000..39ceb1ea --- /dev/null +++ b/riva-frontend/src/App.css @@ -0,0 +1,269 @@ +.App { + text-align: center; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + padding: 20px; + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.controls { + display: flex; + gap: 20px; + margin: 20px 0; +} + +button { + background-color: #4CAF50; + color: white; + border: none; + padding: 10px 20px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + margin: 4px 2px; + cursor: pointer; + border-radius: 4px; + transition: background-color 0.3s; +} + +button:hover { + background-color: #45a049; +} + +button.recording { + background-color: #f44336; +} + +button.recording:hover { + background-color: #d32f2f; +} + +.start-button { + background-color: #4CAF50; + color: white; +} + +.start-button:hover:not(:disabled) { + background-color: #3e8e41; +} + +.stop-button { + background-color: #f44336; + color: white; +} + +.stop-button:hover:not(:disabled) { + background-color: #d32f2f; +} + +.play-button { + background-color: #2196F3; + color: white; +} + +.play-button:hover:not(:disabled) { + background-color: #0b7dda; +} + +.transcript-container { + background-color: rgba(255, 255, 255, 0.1); + border-radius: 8px; + padding: 20px; + margin: 20px 0; + width: 80%; + max-width: 800px; +} + +.transcript { + font-size: 24px; + margin: 0; + min-height: 100px; + white-space: pre-wrap; + word-break: break-word; +} + +.error { + color: #ff6b6b; + background-color: rgba(255, 107, 107, 0.1); + padding: 10px 20px; + border-radius: 5px; + margin-top: 20px; + font-size: 16px; +} + +h1, h2, h3, h4 { + margin-top: 0; +} + +h1 { + margin-bottom: 30px; + color: #61dafb; +} + +h2 { + font-size: 20px; + color: #61dafb; + margin-bottom: 10px; +} + +/* Add styles for server status */ +.server-status { + margin-bottom: 20px; + padding: 10px; + border-radius: 5px; + background-color: #f8f9fa; +} + +.status-ok { + color: #28a745; + font-weight: bold; +} + +.status-error { + color: #dc3545; + font-weight: bold; +} + +main { + max-width: 1200px; + margin: 0 auto; + padding: 20px; +} + +section { + margin-bottom: 40px; +} + +.card { + background-color: #f5f5f5; + border-radius: 8px; + padding: 20px; + margin-bottom: 20px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.button-group { + display: flex; + gap: 10px; + margin-bottom: 20px; +} + +.error-message { + color: #f44336; + margin: 10px 0; + padding: 10px; + background-color: #ffebee; + border-radius: 4px; +} + +.result-container { + margin-top: 20px; + text-align: left; + background-color: #e8f5e9; + padding: 15px; + border-radius: 4px; +} + +p.interim { + color: #757575; + font-style: italic; +} + +p.final { + color: #212121; + font-weight: 500; +} + +textarea { + width: 100%; + padding: 10px; + border: 1px solid #ddd; + border-radius: 4px; + font-family: inherit; + font-size: 16px; + margin-bottom: 10px; +} + +.audio-player { + margin-top: 20px; +} + +audio { + width: 100%; +} + +@media (max-width: 768px) { + .button-group { + flex-direction: column; + } +} + +.volume-container { + width: 100%; + height: 20px; + background-color: #f0f0f0; + border-radius: 10px; + margin: 10px 0; + overflow: hidden; +} + +.volume-indicator { + height: 100%; + width: 0%; + background-color: #4CAF50; + border-radius: 10px; + transition: width 0.1s ease-in-out; +} + +.info-box { + background-color: #e8f4fd; + border-radius: 4px; + padding: 15px; + margin-top: 20px; + border-left: 4px solid #2196F3; +} + +.info-box h4 { + color: #2196F3; + margin-top: 0; + margin-bottom: 10px; +} + +.info-box ul { + margin: 0; + padding-left: 20px; + text-align: left; +} + +.info-box li { + margin-bottom: 8px; +} + diff --git a/riva-frontend/src/App.tsx b/riva-frontend/src/App.tsx new file mode 100644 index 00000000..7ca0bd33 --- /dev/null +++ b/riva-frontend/src/App.tsx @@ -0,0 +1,837 @@ +import React, { useState, useRef, useEffect } from 'react'; +import './App.css'; + +interface AudioConfig { + encoding: string; + sampleRateHertz: number; + languageCode: string; + enableAutomaticPunctuation?: boolean; + enableWordTimeOffsets?: boolean; + maxAlternatives?: number; +} + +interface WavHeader { + chunkId: string; + chunkSize: number; + format: string; + subchunk1Id: string; + subchunk1Size: number; + audioFormat: number; + numChannels: number; + sampleRate: number; + byteRate: number; + blockAlign: number; + bitsPerSample: number; + subchunk2Id: string; + subchunk2Size: number; +} + +class RivaProxyClient { + public serverUrl: string; + + constructor(serverUrl: string = 'http://localhost:3002') { + this.serverUrl = serverUrl; + console.log(`RivaProxyClient initialized with server URL: ${this.serverUrl}`); + } + + async recognize(audio: string, config: any = {}): Promise { + console.log(`Recognize request to ${this.serverUrl}/api/recognize with config:`, config); + console.log(`Audio data length: ${audio.length} characters`); + + try { + console.log("Preparing fetch request..."); + + const response = await fetch(`${this.serverUrl}/api/recognize`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: JSON.stringify({ + audio, + config, + }), + }); + + console.log("Response status:", response.status); + + if (!response.ok) { + const errorText = await response.text(); + console.error(`Server error (${response.status}):`, errorText); + throw new Error(`Server error: ${response.status} ${errorText}`); + } + + const result = await response.json(); + console.log("Recognition response received:", result); + return result; + } catch (error) { + console.error('Error recognizing speech:', error); + // Try to determine if it's a CORS error + if (error instanceof TypeError && (error as any).message.includes('NetworkError')) { + console.error('Possible CORS issue - check server CORS configuration'); + } + throw error; + } + } +} + +// Add WAV file creation utilities +interface WavHeader { + numChannels: number; + sampleRate: number; + bitsPerSample: number; +} + +// Function to create a WAV file from audio data +const createWavFile = (audioData: ArrayBuffer, options: WavHeader): ArrayBuffer => { + const numChannels = options.numChannels || 1; + const sampleRate = options.sampleRate || 16000; + const bitsPerSample = options.bitsPerSample || 16; + + // Calculate sizes based on the audio data + const dataSize = audioData.byteLength; + const byteRate = (sampleRate * numChannels * bitsPerSample) / 8; + const blockAlign = (numChannels * bitsPerSample) / 8; + const headerSize = 44; // Standard WAV header size + const totalSize = headerSize + dataSize; + + // Create the WAV buffer including header + const wavBuffer = new ArrayBuffer(totalSize); + const view = new DataView(wavBuffer); + + // Write WAV header + // "RIFF" chunk descriptor + writeString(view, 0, 'RIFF'); + view.setUint32(4, 36 + dataSize, true); // File size minus RIFF and size field + writeString(view, 8, 'WAVE'); + + // "fmt " sub-chunk + writeString(view, 12, 'fmt '); + view.setUint32(16, 16, true); // Size of fmt chunk (16 bytes) + view.setUint16(20, 1, true); // Format code: 1 = PCM + view.setUint16(22, numChannels, true); // Number of channels + view.setUint32(24, sampleRate, true); // Sample rate + view.setUint32(28, byteRate, true); // Byte rate + view.setUint16(32, blockAlign, true); // Block align + view.setUint16(34, bitsPerSample, true); // Bits per sample + + // "data" sub-chunk + writeString(view, 36, 'data'); + view.setUint32(40, dataSize, true); // Size of the data chunk + + // Copy audio data after header + new Uint8Array(wavBuffer).set(new Uint8Array(audioData), 44); + + return wavBuffer; +}; + +// Helper function to write a string into a DataView at a specific offset +const writeString = (view: DataView, offset: number, string: string) => { + for (let i = 0; i < string.length; i++) { + view.setUint8(offset + i, string.charCodeAt(i)); + } +}; + +function App() { + const [text, setText] = useState(''); + const [recognitionError, setRecognitionError] = useState(null); + const [isStreaming, setIsStreaming] = useState(false); + const [streamingText, setStreamingText] = useState(''); + const [isFinalResult, setIsFinalResult] = useState(true); + const [serverConnected, setServerConnected] = useState(null); + const [serverError, setServerError] = useState(null); + const [isCheckingServer, setIsCheckingServer] = useState(false); + + // Determine server URL based on environment + const getServerUrl = (): string => { + // Always connect directly to the server at port 3002 + const serverUrl = 'http://localhost:3002'; + console.log(`Using direct server connection to ${serverUrl}`); + return serverUrl; + }; + + const audioChunksRef = useRef([]); + const rivaClient = useRef(new RivaProxyClient(getServerUrl())); + const fileInputRef = useRef(null); + const audioContextRef = useRef(null); + const wsRef = useRef(null); + const streamProcessorRef = useRef(null); + + // Initialize Audio Context and check server connectivity + useEffect(() => { + const init = async () => { + try { + console.log("App initializing..."); + + // Check audio context + audioContextRef.current = new (window.AudioContext || (window as any).webkitAudioContext)(); + console.log("Audio context initialized with sample rate:", audioContextRef.current.sampleRate); + + // Check server connectivity - add retry logic + await checkServerConnectivity(); + + // If initial connectivity check failed, retry after a delay + if (!serverConnected) { + console.log("Initial server connectivity check failed, retrying in 2 seconds..."); + setTimeout(async () => { + await checkServerConnectivity(); + }, 2000); + } + } catch (error) { + console.error("Error during initialization:", error); + setServerConnected(false); + setServerError((error as Error).message || "Unknown initialization error"); + } + }; + + init(); + + return () => { + if (audioContextRef.current) { + audioContextRef.current.close(); + } + + if (wsRef.current) { + wsRef.current.close(); + } + }; + }, []); + + // Function to check server connectivity + const checkServerConnectivity = async () => { + setIsCheckingServer(true); + + const healthEndpoint = `${rivaClient.current.serverUrl}/health`; + console.log(`Checking server connectivity at ${healthEndpoint}...`); + + try { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 5000); // 5 second timeout + + try { + const response = await fetch(healthEndpoint, { + method: 'GET', + headers: { + 'Accept': 'application/json' + }, + signal: controller.signal + }); + + clearTimeout(timeoutId); + + // Log full response details for debugging + console.log(`Server responded with status: ${response.status}`); + + if (response.ok) { + const data = await response.json(); + console.log(`Server health check successful:`, data); + setServerConnected(true); + setServerError(null); + return true; + } else { + const errorText = await response.text(); + console.error(`Server returned error status: ${response.status}`, errorText); + setServerConnected(false); + setServerError(`Server error: ${response.status} - ${errorText}`); + return false; + } + } catch (fetchError: any) { + clearTimeout(timeoutId); + if (fetchError.name === 'AbortError') { + console.error('Server health check timed out after 5 seconds'); + setServerConnected(false); + setServerError("Connection timed out. Please check if the server is running and accessible."); + } else if (fetchError.message && fetchError.message.includes('NetworkError')) { + // Specifically handle CORS errors + console.error('Possible CORS issue:', fetchError); + setServerConnected(false); + setServerError("Network error - possibly due to CORS restrictions. Please check server configuration."); + } else { + console.error('Server connectivity check failed:', fetchError); + setServerConnected(false); + setServerError(fetchError.message || "Unknown connection error"); + } + return false; + } + } catch (error) { + console.error('Server connectivity check error:', error); + setServerConnected(false); + setServerError((error as Error).message || "Unknown server connection error"); + return false; + } finally { + setIsCheckingServer(false); + } + }; + + // Helper function to convert ArrayBuffer to base64 + const arrayBufferToBase64 = (buffer: ArrayBuffer): string => { + let binary = ''; + const bytes = new Uint8Array(buffer); + const len = bytes.byteLength; + + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i]); + } + + return window.btoa(binary); + }; + + const startStreaming = async () => { + try { + setIsStreaming(true); + setStreamingText(''); + setRecognitionError(null); + + console.log("Starting streaming recognition..."); + + // Use more permissive audio constraints - browser's default processing often works better + const stream = await navigator.mediaDevices.getUserMedia({ + audio: { + // Less restrictive constraints to let the browser optimize + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true + // Don't force channelCount or sampleRate as browser defaults often work better + } + }); + + console.log("Audio stream obtained with constraints:", stream.getAudioTracks()[0].getSettings()); + + // Create audio context + if (!audioContextRef.current) { + audioContextRef.current = new (window.AudioContext || (window as any).webkitAudioContext)(); + } + + console.log("Audio context sample rate:", audioContextRef.current.sampleRate); + + // Create WebSocket connection + console.log("Creating WebSocket connection for streaming..."); + + // Construct WebSocket URL from server URL + const wsUrl = rivaClient.current.serverUrl.replace('http', 'ws') + '/streaming/asr'; + console.log("WebSocket URL:", wsUrl); + + wsRef.current = new WebSocket(wsUrl); + + // Debug connection state + console.log("Initial WebSocket state:", wsRef.current.readyState); + + // Add more detailed WebSocket event handlers for debugging + wsRef.current.onopen = () => { + console.log("WebSocket connection established, sending config..."); + + // Send configuration once connection is open + const config = { + sampleRate: 16000, // Always use 16kHz for Riva + encoding: 'LINEAR_PCM', + languageCode: 'en-US', + maxAlternatives: 1, + enableAutomaticPunctuation: true + }; + + console.log("Sending streaming config:", config); + + if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) { + wsRef.current.send(JSON.stringify(config)); + console.log("Config sent successfully"); + } else { + console.error("WebSocket is not open, cannot send config", wsRef.current?.readyState); + setRecognitionError("WebSocket connection failed. Please try again."); + stopStreaming(); + } + }; + + wsRef.current.onmessage = (event) => { + try { + const response = JSON.parse(event.data); + if (response.error) { + console.error("Streaming recognition error:", response.error); + setRecognitionError(`Streaming error: ${response.error}`); + stopStreaming(); + return; + } + + console.log("Received streaming response:", response); + + if (response.results && response.results.length > 0) { + const result = response.results[0]; + // Log the full result structure to debug + console.log("Streaming result structure:", JSON.stringify(result)); + + // Check if alternatives exists directly in the result object + if (result.alternatives && result.alternatives.length > 0) { + const transcript = result.alternatives[0].transcript || ''; + console.log(`Transcript [${response.isPartial ? 'interim' : 'final'}]: ${transcript}`); + + setStreamingText(transcript); + setIsFinalResult(!response.isPartial); + + // If we have a final result, append it to the text area automatically + if (!response.isPartial && transcript) { + setText((prevText) => { + const newText = prevText ? + `${prevText} ${transcript}` : + transcript; + return newText; + }); + } + } + // If no alternatives directly in result, try the standard Riva structure + else if (result && result.alternatives && result.alternatives.length > 0) { + const transcript = result.alternatives[0].transcript || ''; + console.log(`Transcript [${response.isPartial ? 'interim' : 'final'}]: ${transcript}`); + + setStreamingText(transcript); + setIsFinalResult(!response.isPartial); + + // If we have a final result, append it to the text area automatically + if (!response.isPartial && transcript) { + setText((prevText) => { + const newText = prevText ? + `${prevText} ${transcript}` : + transcript; + return newText; + }); + } + } + // Debug if we couldn't find transcript + else { + console.warn("Could not find alternatives in the streaming result:", result); + } + } else { + console.log("No results in streaming response"); + } + } catch (error) { + console.error('Error parsing WebSocket message:', error); + } + }; + + wsRef.current.onerror = (error) => { + console.error('WebSocket error:', error); + setRecognitionError('WebSocket connection error. Check the server connection.'); + stopStreaming(); + }; + + wsRef.current.onclose = (event) => { + console.log(`WebSocket connection closed with code ${event.code}: ${event.reason || 'No reason provided'}`); + + // Show appropriate error message based on the close code + if (event.code !== 1000) { // 1000 is normal closure + let errorMessage = "Connection to speech recognition server lost."; + + if (event.code === 1006) { + errorMessage = "Abnormal connection closure. The server might be down."; + } else if (event.code === 1008 || event.code === 1011) { + errorMessage = "Server error: " + (event.reason || "Unknown error"); + } + + setRecognitionError(errorMessage); + } + + if (isStreaming) { + stopStreaming(); + } + }; + + // Create audio processing pipeline + console.log("Setting up audio processing pipeline..."); + const source = audioContextRef.current.createMediaStreamSource(stream); + + // Create a gain node to boost the audio signal + const gainNode = audioContextRef.current.createGain(); + gainNode.gain.value = 2.0; // Boost the volume more significantly + + // Use smaller buffer size for lower latency + // Try to use a power of 2 buffer size for better performance + const bufferSize = 4096; // Larger buffer might be more stable + const processor = audioContextRef.current.createScriptProcessor(bufferSize, 1, 1); + streamProcessorRef.current = processor; + + // Log important audio context info + console.log(`Audio context state: ${audioContextRef.current.state}`); + console.log(`Audio context sample rate: ${audioContextRef.current.sampleRate}Hz`); + console.log(`ScriptProcessor buffer size: ${bufferSize}`); + + // If audio context is suspended (happens in some browsers), resume it + if (audioContextRef.current.state === 'suspended') { + console.log("Resuming suspended audio context..."); + audioContextRef.current.resume().then(() => { + console.log("Audio context resumed successfully"); + }).catch(err => { + console.error("Failed to resume audio context:", err); + setRecognitionError("Failed to access microphone. Please check permissions."); + stopStreaming(); + }); + } + + // Add visualization if the audio context exists + if (audioContextRef.current) { + try { + const analyser = audioContextRef.current.createAnalyser(); + analyser.fftSize = 256; + source.connect(analyser); + + // Store the analyser for visualization updates + const bufferLength = analyser.frequencyBinCount; + const dataArray = new Uint8Array(bufferLength); + + // Update visualization every 50ms + const updateVisualization = () => { + if (!isStreaming) return; + + analyser.getByteFrequencyData(dataArray); + + // Calculate average volume level (simple approach) + let sum = 0; + for (let i = 0; i < bufferLength; i++) { + sum += dataArray[i]; + } + const average = sum / bufferLength; + + // Update volume indicator + const volumeIndicator = document.getElementById('volume-indicator'); + if (volumeIndicator) { + volumeIndicator.style.width = `${Math.min(100, average * 2)}%`; + + // Change color based on volume level + if (average < 5) { + volumeIndicator.style.backgroundColor = '#cccccc'; // Gray for silence + } else if (average < 20) { + volumeIndicator.style.backgroundColor = '#ff9800'; // Orange for low volume + } else { + volumeIndicator.style.backgroundColor = '#4CAF50'; // Green for good volume + } + } + + // Continue animation if still streaming + if (isStreaming) { + requestAnimationFrame(updateVisualization); + } + }; + + // Start visualization + updateVisualization(); + } catch (vizError) { + console.error('Could not initialize audio visualization:', vizError); + // Continue without visualization + } + } + + // Need to resample if browser's sample rate is not 16kHz + const browserSampleRate = audioContextRef.current.sampleRate; + const targetSampleRate = 16000; + const resample = browserSampleRate !== targetSampleRate; + + console.log(`Audio will ${resample ? 'be resampled from ' + browserSampleRate + 'Hz to ' + targetSampleRate + 'Hz' : 'not be resampled'}`); + + // Connect nodes: source -> gain -> processor -> destination + source.connect(gainNode); + gainNode.connect(processor); + processor.connect(audioContextRef.current.destination); + + console.log("Audio processing pipeline connected"); + + // Add a simple diagnostic timer to check if audio is being processed + let frameCount = 0; + const diagnosticInterval = setInterval(() => { + if (isStreaming) { + console.log(`Audio diagnostic: processed ${frameCount} frames since last check`); + + if (frameCount === 0) { + console.warn("No audio frames processed! Check microphone permissions and connections."); + // Update UI to show a warning + setRecognitionError(prev => prev || "No audio detected. Please check your microphone."); + } + + // Reset counter for next interval + frameCount = 0; + } else { + clearInterval(diagnosticInterval); + } + }, 5000); // Check every 5 seconds + + // Audio processing function - convert and send audio data + processor.onaudioprocess = (e) => { + // Increment frame counter for diagnostics + frameCount++; + + if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) { + // Get raw audio data + const inputData = e.inputBuffer.getChannelData(0); + + // Log occasionally to debug audio data + if (Math.random() < 0.01) { // ~1% of frames + // Calculate RMS to check audio level + let sum = 0; + for (let i = 0; i < inputData.length; i++) { + sum += inputData[i] * inputData[i]; + } + const rms = Math.sqrt(sum / inputData.length); + console.log(`Audio frame: length=${inputData.length}, rms=${rms.toFixed(6)}`); + + if (rms < 0.001) { + console.warn("Very low audio level detected. Check your microphone."); + } + } + + // Resample to 16kHz if needed + const browserSampleRate = audioContextRef.current!.sampleRate; + const targetSampleRate = 16000; + let audioToSend = inputData; + + if (browserSampleRate !== targetSampleRate) { + // Simple linear resampling + const ratio = browserSampleRate / targetSampleRate; + const newLength = Math.floor(inputData.length / ratio); + const resampled = new Float32Array(newLength); + + for (let i = 0; i < newLength; i++) { + const originalIndex = Math.floor(i * ratio); + resampled[i] = inputData[originalIndex]; + } + + audioToSend = resampled; + + // Log resampling occasionally + if (Math.random() < 0.01) { + console.log(`Resampled audio: ${browserSampleRate}Hz → ${targetSampleRate}Hz, + ${inputData.length} → ${resampled.length} samples`); + } + } + + // Convert to Int16 PCM (what Riva expects) + const pcmData = new Int16Array(audioToSend.length); + for (let i = 0; i < audioToSend.length; i++) { + // Scale to int16 range (-32768 to 32767) + // Apply a gain multiplier to boost the audio signal + const gain = 1.5; // Boost by 50% + const sample = Math.max(-1, Math.min(1, audioToSend[i] * gain)); + pcmData[i] = Math.floor(sample * 32767); + } + + // Send the audio data as binary + wsRef.current.send(pcmData.buffer); + } else if (wsRef.current) { + console.warn("WebSocket not open, state:", wsRef.current.readyState); + } + }; + + console.log("Streaming recognition started successfully"); + + } catch (error) { + console.error('Error starting streaming:', error); + setRecognitionError(`Error starting streaming: ${(error as Error).message}`); + setIsStreaming(false); + } + }; + + const stopStreaming = () => { + console.log("Stopping streaming recognition..."); + + // Disconnect audio processing + if (streamProcessorRef.current && audioContextRef.current) { + console.log("Disconnecting audio processor"); + try { + streamProcessorRef.current.disconnect(); + console.log("Audio processor disconnected"); + } catch (e) { + console.error("Error disconnecting audio processor:", e); + } + streamProcessorRef.current = null; + } + + // Close WebSocket properly + if (wsRef.current) { + if (wsRef.current.readyState === WebSocket.OPEN || wsRef.current.readyState === WebSocket.CONNECTING) { + console.log(`Closing WebSocket connection (state: ${wsRef.current.readyState})`); + try { + // Send a clean close frame + wsRef.current.close(1000, "Client ended streaming session"); + console.log("WebSocket closed cleanly"); + } catch (e) { + console.error("Error closing WebSocket:", e); + } + } else { + console.log(`WebSocket already closing/closed (state: ${wsRef.current.readyState})`); + } + wsRef.current = null; + } + + setIsStreaming(false); + setIsFinalResult(true); + console.log("Streaming recognition stopped"); + }; + + const handleFileUpload = (event: React.ChangeEvent) => { + const file = event.target.files && event.target.files[0]; + + console.log("File upload initiated:", file ? `${file.name} (${file.type}, ${file.size} bytes)` : "No file selected"); + + if (file) { + // Check if it's an audio file + if (!file.type.startsWith('audio/')) { + console.error("Not an audio file:", file.type); + setRecognitionError('Please upload an audio file.'); + return; + } + + const reader = new FileReader(); + + reader.onload = async (e) => { + try { + console.log("File read complete, processing audio..."); + + if (e.target && e.target.result) { + const arrayBuffer = e.target.result as ArrayBuffer; + console.log("Audio file loaded, size:", arrayBuffer.byteLength, "bytes"); + + if (file.type === 'audio/wav' || file.type === 'audio/x-wav' || file.name.endsWith('.wav')) { + console.log("WAV file detected, saving locally for verification"); + } + + // Convert to base64 for sending to the server + console.log("Converting audio to base64..."); + const base64Audio = arrayBufferToBase64(arrayBuffer); + console.log("Base64 conversion complete, length:", base64Audio.length); + + // Check server URL before sending + console.log("Using server URL:", rivaClient.current.serverUrl); + + // Recognize speech + console.log("Sending audio to server for recognition..."); + const result = await rivaClient.current.recognize(base64Audio, { + encoding: 'LINEAR_PCM', + sampleRateHertz: 16000, + languageCode: 'en-US', + enableAutomaticPunctuation: true + }); + + console.log("Recognition result received:", result); + + if (result && result.results && result.results.length > 0) { + const transcript = result.results[0]?.alternatives?.[0]?.transcript || 'No transcription available'; + console.log("Setting transcript:", transcript); + setText(transcript); + } else { + console.log("No valid transcription in results"); + setText('No transcription available'); + } + } + } catch (error) { + console.error('Error processing uploaded file:', error); + setRecognitionError(`Error processing file: ${(error as Error).message}`); + } + }; + + reader.onerror = (event) => { + console.error('Error reading the file:', event); + setRecognitionError('Error reading the file.'); + }; + + console.log("Starting file read as ArrayBuffer..."); + reader.readAsArrayBuffer(file); + } + }; + + const handleUploadButtonClick = () => { + if (fileInputRef.current) { + fileInputRef.current.click(); + } + }; + + return ( +
+
+

Riva AI Voice Services

+
+ +
+
+

Speech Recognition

+ + {serverConnected === false && ( +
+

⚠️ {serverError || "Could not connect to the backend server. Please ensure the server is running on port 3002."}

+ +
+ )} + +
+

Speech Recognition

+
+ + + + + +
+ + {recognitionError && ( +
+ {recognitionError} +
+ )} + + {isStreaming && ( +
+
+
+ )} + + {isStreaming && ( +
+

Real-time Transcription:

+ {streamingText ? ( +

+ {streamingText} +

+ ) : ( +

Waiting for speech...

+ )} +
+ )} + + {text && ( +
+

Transcription:

+

{text}

+
+ )} + +
+

Instructions:

+
    +
  • Click "Upload Audio File" to transcribe pre-recorded audio
  • +
  • Or click "Start Streaming" to begin real-time speech recognition using your microphone
  • +
  • When streaming, partial results will appear in gray, final results in black
  • +
  • Click "Stop Streaming" when you are finished
  • +
+
+
+
+
+
+ ); +} + +export default App; + diff --git a/riva-frontend/src/index.css b/riva-frontend/src/index.css new file mode 100644 index 00000000..ec2585e8 --- /dev/null +++ b/riva-frontend/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/riva-frontend/src/index.tsx b/riva-frontend/src/index.tsx new file mode 100644 index 00000000..1fd12b70 --- /dev/null +++ b/riva-frontend/src/index.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; + +const root = ReactDOM.createRoot( + document.getElementById('root') as HTMLElement +); +root.render( + + + +); diff --git a/riva-frontend/src/logo.svg b/riva-frontend/src/logo.svg new file mode 100644 index 00000000..9dfc1c05 --- /dev/null +++ b/riva-frontend/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/riva-frontend/src/react-app-env.d.ts b/riva-frontend/src/react-app-env.d.ts new file mode 100644 index 00000000..6431bc5f --- /dev/null +++ b/riva-frontend/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/riva-frontend/src/riva-client-lib.d.ts b/riva-frontend/src/riva-client-lib.d.ts new file mode 100644 index 00000000..1217f54a --- /dev/null +++ b/riva-frontend/src/riva-client-lib.d.ts @@ -0,0 +1,133 @@ +declare module 'riva-client-lib' { + export enum AudioEncoding { + ENCODING_UNSPECIFIED = 'ENCODING_UNSPECIFIED', + LINEAR_PCM = 'LINEAR_PCM', + FLAC = 'FLAC', + MULAW = 'MULAW', + ALAW = 'ALAW' + } + + export interface ClientConfig { + serverUrl: string; + auth?: { + ssl?: boolean; + sslCert?: string; + apiKey?: string; + metadata?: Record; + }; + rest?: { + baseUrl?: string; + timeout?: number; + headers?: Record; + retry?: boolean; + maxRetries?: number; + }; + } + + export interface AsrConfig { + encoding: AudioEncoding; + sampleRateHertz: number; + languageCode: string; + maxAlternatives?: number; + enableAutomaticPunctuation?: boolean; + enableWordTimeOffsets?: boolean; + enableWordConfidence?: boolean; + profanityFilter?: boolean; + audioChannelCount?: number; + enableSpeakerDiarization?: boolean; + diarizationSpeakerCount?: number; + model?: string; + } + + export interface TtsConfig { + text: string; + voiceName?: string; + languageCode?: string; + encoding?: AudioEncoding; + sampleRateHertz?: number; + pitch?: number; + speakingRate?: number; + quality?: number; + customDictionary?: Record; + } + + export interface WavFileParams { + numFrames: number; + frameRate: number; + duration: number; + numChannels: number; + sampleWidth: number; + dataOffset: number; + } + + export interface SpeechRecognitionAlternative { + transcript: string; + confidence?: number; + words?: { + word: string; + startTime?: number; + endTime?: number; + confidence?: number; + }[]; + } + + export interface SpeechRecognitionResult { + alternatives: SpeechRecognitionAlternative[]; + isFinal?: boolean; + stability?: number; + speakerTag?: number; + } + + export interface AsrResponse { + results: SpeechRecognitionResult[]; + isPartial?: boolean; + } + + export interface TtsResponse { + audio: { + audioContent: string | Uint8Array; + sampleRateHertz: number; + }; + success: boolean; + error?: string; + } + + export interface VoiceInfo { + name: string; + languages: string[]; + gender?: string; + sampleRate?: number; + } + + export interface VoicesResponse { + voices: VoiceInfo[]; + } + + export class AsrClient { + constructor(config: ClientConfig); + recognize(audioData: ArrayBuffer | ArrayBufferLike | string, config?: Partial): Promise; + createStreamingConnection(config?: Partial): WebSocket; + } + + export class TtsClient { + constructor(config: ClientConfig); + synthesize(text: string, config?: Partial>): Promise; + getVoices(): Promise; + } + + export function examineWavHeader(buffer: Uint8Array): WavFileParams | null; + + export function createWavFile( + audioData: ArrayBuffer | ArrayBufferLike, + options: { + numChannels?: number; + sampleRate?: number; + bitsPerSample?: number; + } + ): ArrayBuffer; + + export function arrayBufferToBase64(buffer: ArrayBuffer | ArrayBufferLike): string; + export function base64ToArrayBuffer(base64: string): ArrayBuffer; + export function stringToArrayBuffer(str: string): ArrayBuffer; + export function arrayBufferToString(buffer: ArrayBuffer | ArrayBufferLike): string; +} \ No newline at end of file diff --git a/riva-frontend/src/types.ts b/riva-frontend/src/types.ts new file mode 100644 index 00000000..b4521792 --- /dev/null +++ b/riva-frontend/src/types.ts @@ -0,0 +1,40 @@ +export enum AudioEncoding { + ENCODING_UNSPECIFIED = 0, + LINEAR_PCM = 1, + FLAC = 2, + MULAW = 3, + ALAW = 4 +} + +export interface RecognitionConfig { + encoding: AudioEncoding; + sampleRateHertz: number; + languageCode: string; + enableAutomaticPunctuation?: boolean; + enableWordTimeOffsets?: boolean; +} + +export interface WordInfo { + startTime: number; + endTime: number; + word: string; + confidence: number; + speakerTag?: string; +} + +export interface SpeechRecognitionAlternative { + transcript: string; + confidence: number; + words: WordInfo[]; +} + +export interface SpeechRecognitionResult { + alternatives: SpeechRecognitionAlternative[]; + channelTag: number; + languageCode: string; + isPartial?: boolean; +} + +export interface RecognizeResponse { + results: SpeechRecognitionResult[]; +} \ No newline at end of file diff --git a/riva-frontend/tsconfig.json b/riva-frontend/tsconfig.json new file mode 100644 index 00000000..a273b0cf --- /dev/null +++ b/riva-frontend/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +}