From 1eaf20042f59c6bee58de4c9ea3b0419608f802b Mon Sep 17 00:00:00 2001 From: vuongpm Date: Mon, 5 Jan 2026 17:41:57 +0700 Subject: [PATCH] first commit --- .gitignore | 23 + README.md | 1 + docker-compose.yml | 77 + meeting-backend/.dockerignore | 7 + meeting-backend/.gitignore | 31 + meeting-backend/Dockerfile | 20 + meeting-backend/package.json | 37 + meeting-backend/scripts/seedAdmin.js | 46 + meeting-backend/src/config/db.js | 13 + .../src/middleware/authMiddleware.js | 30 + .../src/middleware/uploadAudioMiddleware.js | 55 + .../src/middleware/uploadMiddleware.js | 56 + meeting-backend/src/models/Document.js | 35 + meeting-backend/src/models/Meeting.js | 16 + meeting-backend/src/models/MeetingMinutes.js | 41 + meeting-backend/src/models/User.js | 15 + meeting-backend/src/routes/auth.js | 128 + meeting-backend/src/routes/document.js | 345 + meeting-backend/src/routes/meeting.js | 167 + meeting-backend/src/routes/minutes.js | 240 + meeting-backend/src/routes/user.js | 64 + meeting-backend/src/server.js | 44 + .../src/services/documentProcessor.js | 242 + meeting-backend/src/services/ragService.js | 206 + meeting-backend/src/socket/socketHandler.js | 470 + .../test/data/05-versions-space.pdf | 0 .../uploads/1762218354571-276475551.pdf | Bin 0 -> 529820 bytes meeting-frontend/.dockerignore | 6 + meeting-frontend/.gitignore | 23 + meeting-frontend/Dockerfile | 26 + meeting-frontend/package-lock.json | 17598 ++++++++++++++++ meeting-frontend/package.json | 27 + meeting-frontend/public/index.html | 14 + meeting-frontend/src/App.css | 4 + meeting-frontend/src/App.js | 54 + meeting-frontend/src/api/auth.js | 60 + meeting-frontend/src/api/client.js | 34 + .../src/components/DocumentUpload.js | 123 + meeting-frontend/src/components/Navbar.js | 86 + .../src/components/ProtectedRoute.js | 21 + meeting-frontend/src/components/RAGChatbox.js | 135 + meeting-frontend/src/components/VideoCall.js | 1934 ++ meeting-frontend/src/context/AuthContext.js | 48 + meeting-frontend/src/hooks/useAuth.js | 12 + meeting-frontend/src/index.css | 74 + meeting-frontend/src/index.js | 11 + .../src/pages/AdminDashboardPage.js | 159 + meeting-frontend/src/pages/DashboardPage.js | 260 + meeting-frontend/src/pages/LoginPage.js | 151 + meeting-frontend/src/pages/MeetingRoomPage.js | 998 + meeting-frontend/src/pages/Meetings.js | 45 + meeting-frontend/src/pages/RegisterPage.js | 169 + .../src/styles/AdminDashboard.css | 248 + meeting-frontend/src/styles/AuthPages.css | 203 + meeting-frontend/src/styles/Dashboard.css | 371 + .../src/styles/DocumentUpload.css | 134 + meeting-frontend/src/styles/Documents.css | 126 + meeting-frontend/src/styles/MeetingRoom.css | 1600 ++ meeting-frontend/src/styles/Navbar.css | 204 + meeting-frontend/src/styles/RAGChatbox.css | 242 + meeting-frontend/src/styles/VideoCall.css | 386 + nginx/conf.d/default.conf | 43 + nginx/nginx.conf | 61 + package.json | 81 + 64 files changed, 28180 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 meeting-backend/.dockerignore create mode 100644 meeting-backend/.gitignore create mode 100644 meeting-backend/Dockerfile create mode 100644 meeting-backend/package.json create mode 100644 meeting-backend/scripts/seedAdmin.js create mode 100644 meeting-backend/src/config/db.js create mode 100644 meeting-backend/src/middleware/authMiddleware.js create mode 100644 meeting-backend/src/middleware/uploadAudioMiddleware.js create mode 100644 meeting-backend/src/middleware/uploadMiddleware.js create mode 100644 meeting-backend/src/models/Document.js create mode 100644 meeting-backend/src/models/Meeting.js create mode 100644 meeting-backend/src/models/MeetingMinutes.js create mode 100644 meeting-backend/src/models/User.js create mode 100644 meeting-backend/src/routes/auth.js create mode 100644 meeting-backend/src/routes/document.js create mode 100644 meeting-backend/src/routes/meeting.js create mode 100644 meeting-backend/src/routes/minutes.js create mode 100644 meeting-backend/src/routes/user.js create mode 100644 meeting-backend/src/server.js create mode 100644 meeting-backend/src/services/documentProcessor.js create mode 100644 meeting-backend/src/services/ragService.js create mode 100644 meeting-backend/src/socket/socketHandler.js create mode 100644 meeting-backend/test/data/05-versions-space.pdf create mode 100644 meeting-backend/uploads/1762218354571-276475551.pdf create mode 100644 meeting-frontend/.dockerignore create mode 100644 meeting-frontend/.gitignore create mode 100644 meeting-frontend/Dockerfile create mode 100644 meeting-frontend/package-lock.json create mode 100644 meeting-frontend/package.json create mode 100644 meeting-frontend/public/index.html create mode 100644 meeting-frontend/src/App.css create mode 100644 meeting-frontend/src/App.js create mode 100644 meeting-frontend/src/api/auth.js create mode 100644 meeting-frontend/src/api/client.js create mode 100644 meeting-frontend/src/components/DocumentUpload.js create mode 100644 meeting-frontend/src/components/Navbar.js create mode 100644 meeting-frontend/src/components/ProtectedRoute.js create mode 100644 meeting-frontend/src/components/RAGChatbox.js create mode 100644 meeting-frontend/src/components/VideoCall.js create mode 100644 meeting-frontend/src/context/AuthContext.js create mode 100644 meeting-frontend/src/hooks/useAuth.js create mode 100644 meeting-frontend/src/index.css create mode 100644 meeting-frontend/src/index.js create mode 100644 meeting-frontend/src/pages/AdminDashboardPage.js create mode 100644 meeting-frontend/src/pages/DashboardPage.js create mode 100644 meeting-frontend/src/pages/LoginPage.js create mode 100644 meeting-frontend/src/pages/MeetingRoomPage.js create mode 100644 meeting-frontend/src/pages/Meetings.js create mode 100644 meeting-frontend/src/pages/RegisterPage.js create mode 100644 meeting-frontend/src/styles/AdminDashboard.css create mode 100644 meeting-frontend/src/styles/AuthPages.css create mode 100644 meeting-frontend/src/styles/Dashboard.css create mode 100644 meeting-frontend/src/styles/DocumentUpload.css create mode 100644 meeting-frontend/src/styles/Documents.css create mode 100644 meeting-frontend/src/styles/MeetingRoom.css create mode 100644 meeting-frontend/src/styles/Navbar.css create mode 100644 meeting-frontend/src/styles/RAGChatbox.css create mode 100644 meeting-frontend/src/styles/VideoCall.css create mode 100644 nginx/conf.d/default.conf create mode 100644 nginx/nginx.conf create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a6fe2fe --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# Node modules +meeting-backend/node_modules/ +meeting-frontend/node_modules/ + +# Environment files +meeting-backend/.env +meeting-frontend/.env + +# Build outputs +meeting-frontend/build/ +meeting-backend/dist/ + +# Logs +*.log + +# SSL Certificates (sensitive data - do not commit) +certs/ +*.pem +*.key +*.crt + +# Nginx config (may contain sensitive paths) +# nginx/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..9192bdf --- /dev/null +++ b/README.md @@ -0,0 +1 @@ + Meeting App \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..13d52fd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,77 @@ +version: "3.8" + +services: + # =============================== + # MongoDB + # =============================== + mongo: + image: mongo:6.0 + container_name: meeting-mongo + restart: unless-stopped + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: example123 + volumes: + - mongo_data:/data/db + networks: + - meeting-net + + # =============================== + # Backend + # =============================== + backend: + build: + context: ./meeting-backend + container_name: meeting-backend + restart: unless-stopped + env_file: + - ./meeting-backend/.env + environment: + - MONGO_URI=mongodb://root:example123@mongo:27017/meetingDB?authSource=admin + - CLIENT_URL=https://bkmeeting.soict.io + - PORT=5000 + expose: + - "5000" + depends_on: + - mongo + networks: + - meeting-net + + # =============================== + # Frontend + # =============================== + frontend: + build: + context: ./meeting-frontend + container_name: meeting-frontend + restart: unless-stopped + expose: + - "80" + networks: + - meeting-net + + # =============================== + # Nginx Reverse Proxy (HTTPS) + # =============================== + nginx: + image: nginx:stable-alpine + container_name: meeting-nginx + restart: unless-stopped + ports: + - "80:80" + - "443:443" + volumes: + - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro + - ./certs:/etc/letsencrypt/live/bkmeeting.soict.io:ro + depends_on: + - backend + - frontend + networks: + - meeting-net + +volumes: + mongo_data: + +networks: + meeting-net: + driver: bridge diff --git a/meeting-backend/.dockerignore b/meeting-backend/.dockerignore new file mode 100644 index 0000000..239cf9d --- /dev/null +++ b/meeting-backend/.dockerignore @@ -0,0 +1,7 @@ +node_modules +npm-debug.log +.env +test +uploads +.vscode +.git diff --git a/meeting-backend/.gitignore b/meeting-backend/.gitignore new file mode 100644 index 0000000..438228b --- /dev/null +++ b/meeting-backend/.gitignore @@ -0,0 +1,31 @@ +# Node modules +node_modules/ +**/node_modules/ + +# Environment files +.env +**/.env + +# Build outputs +build/ +dist/ + +# Logs +logs/ +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# OS files +.DS_Store +Thumbs.db + +# IDE settings +.vscode/ +.idea/ + +# Others +package-lock.json + + diff --git a/meeting-backend/Dockerfile b/meeting-backend/Dockerfile new file mode 100644 index 0000000..d2266a7 --- /dev/null +++ b/meeting-backend/Dockerfile @@ -0,0 +1,20 @@ +# =============================== +# 1. Dùng Node.js image nhẹ cho backend +# =============================== +FROM node:18-alpine + +# Thiết lập thư mục làm việc trong container +WORKDIR /app + +# Copy file package và cài dependencies (npm ci = cài chính xác version) +COPY package*.json ./ +RUN npm install + +# Copy toàn bộ code backend vào container +COPY . . + +# Expose port của backend (trùng với PORT trong .env hoặc server.js) +EXPOSE 5000 + +# Lệnh chạy server +CMD ["node", "src/server.js"] diff --git a/meeting-backend/package.json b/meeting-backend/package.json new file mode 100644 index 0000000..ef2360b --- /dev/null +++ b/meeting-backend/package.json @@ -0,0 +1,37 @@ +{ + "name": "meeting-backend", + "version": "1.0.0", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node --max-old-space-size=4096 src/server.js", + "dev": "nodemon --exec \"node --max-old-space-size=4096\" src/server.js", + "seed": "node scripts/seedAdmin.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "axios": "^1.13.2", + "bcryptjs": "^3.0.2", + "cors": "^2.8.5", + "dotenv": "^17.2.3", + "express": "^5.1.0", + "express-session": "^1.17.3", + "form-data": "^4.0.5", + "jsonwebtoken": "^9.0.2", + "mammoth": "^1.6.0", + "mongoose": "^8.19.2", + "multer": "^2.0.2", + "openai": "^4.28.0", + "passport": "^0.6.0", + "passport-google-oauth20": "^2.0.0", + "pdf-parse": "^1.1.1", + "socket.io": "^4.8.1" + }, + "devDependencies": { + "nodemon": "^3.1.10" + } +} diff --git a/meeting-backend/scripts/seedAdmin.js b/meeting-backend/scripts/seedAdmin.js new file mode 100644 index 0000000..b684e65 --- /dev/null +++ b/meeting-backend/scripts/seedAdmin.js @@ -0,0 +1,46 @@ +import mongoose from "mongoose" +import bcrypt from "bcryptjs" +import dotenv from "dotenv" +import User from "../src/models/User.js" + +dotenv.config() + +const seedAdmin = async () => { + try { + // Connect to MongoDB + await mongoose.connect("mongodb://root:example123@bkmeeting.soict.io:27017/meetingDB?authSource=admin") + console.log("✓ Kết nối MongoDB thành công") + + // Check if admin already exists + const existingAdmin = await User.findOne({ role: "admin" }) + if (existingAdmin) { + console.log("✓ Admin đã tồn tại:", existingAdmin.email) + await mongoose.connection.close() + return + } + + const hashedPassword = await bcrypt.hash("admin123", 10) + const adminUser = new User({ + email: "admin@meeting.com", + fullName: "Admin", + phone: "+84123456789", + username: "admin", + password: hashedPassword, + role: "admin", + approved: true, // Admin is automatically approved + }) + + await adminUser.save() + console.log("✓ Tài khoản admin được tạo thành công!") + console.log(" Email: admin@meeting.com") + console.log(" Mật khẩu: admin123") + console.log(" (Vui lòng đổi mật khẩu sau khi đăng nhập)") + + await mongoose.connection.close() + } catch (error) { + console.error("Lỗi:", error.message) + process.exit(1) + } +} + +seedAdmin() diff --git a/meeting-backend/src/config/db.js b/meeting-backend/src/config/db.js new file mode 100644 index 0000000..84a0488 --- /dev/null +++ b/meeting-backend/src/config/db.js @@ -0,0 +1,13 @@ +import mongoose from "mongoose"; + +const connectDB = async () => { + try { + const conn = await mongoose.connect(process.env.MONGO_URI); + console.log(`MongoDB Connected: ${conn.connection.host}`); + } catch (error) { + console.error(`Error: ${error.message}`); + process.exit(1); + } +}; + +export default connectDB; diff --git a/meeting-backend/src/middleware/authMiddleware.js b/meeting-backend/src/middleware/authMiddleware.js new file mode 100644 index 0000000..5b13492 --- /dev/null +++ b/meeting-backend/src/middleware/authMiddleware.js @@ -0,0 +1,30 @@ +import jwt from "jsonwebtoken" +import dotenv from "dotenv" + +dotenv.config() + +export const verifyToken = (req, res, next) => { + try { + const token = req.headers.authorization?.split(" ")[1] + if (!token) { + return res.status(401).json({ message: "Token không được cung cấp" }) + } + + const decoded = jwt.verify(token, process.env.JWT_SECRET) + req.user = decoded + next() + } catch (error) { + res.status(401).json({ message: "Token không hợp lệ hoặc đã hết hạn" }) + } +} + +export const isAdmin = (req, res, next) => { + try { + if (req.user.role !== "admin") { + return res.status(403).json({ message: "Chỉ admin mới có quyền truy cập" }) + } + next() + } catch (error) { + res.status(403).json({ message: "Lỗi kiểm tra quyền" }) + } +} diff --git a/meeting-backend/src/middleware/uploadAudioMiddleware.js b/meeting-backend/src/middleware/uploadAudioMiddleware.js new file mode 100644 index 0000000..2d33399 --- /dev/null +++ b/meeting-backend/src/middleware/uploadAudioMiddleware.js @@ -0,0 +1,55 @@ +import multer from "multer" +import path from "path" +import { fileURLToPath } from "url" +import fs from "fs" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +// Create uploads/audio directory if it doesn't exist +const uploadsDir = path.join(__dirname, "../../uploads/audio") +if (!fs.existsSync(uploadsDir)) { + fs.mkdirSync(uploadsDir, { recursive: true }) +} + +// Configure storage for audio files +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, uploadsDir) + }, + filename: (req, file, cb) => { + const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9) + const ext = path.extname(file.originalname || "") || ".wav" + cb(null, uniqueSuffix + ext) + }, +}) + +// File filter for audio files +const fileFilter = (req, file, cb) => { + const allowedTypes = [ + "audio/wav", + "audio/webm", + "audio/ogg", + "audio/mpeg", + "audio/mp3", + ] + + if (allowedTypes.includes(file.mimetype)) { + cb(null, true) + } else { + cb(new Error("File type not supported. Only WAV, WEBM, OGG, MP3 are allowed."), false) + } +} + +// Multer instance for audio +export const uploadAudio = multer({ + storage: storage, + fileFilter: fileFilter, + limits: { + fileSize: 100 * 1024 * 1024, // 100MB max for audio recordings + }, +}) + +// Single audio file upload middleware +export const uploadAudioSingle = uploadAudio.single("audio") + diff --git a/meeting-backend/src/middleware/uploadMiddleware.js b/meeting-backend/src/middleware/uploadMiddleware.js new file mode 100644 index 0000000..59d5098 --- /dev/null +++ b/meeting-backend/src/middleware/uploadMiddleware.js @@ -0,0 +1,56 @@ +import multer from "multer" +import path from "path" +import { fileURLToPath } from "url" +import fs from "fs" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +// Create uploads directory if it doesn't exist +const uploadsDir = path.join(__dirname, "../../uploads") +if (!fs.existsSync(uploadsDir)) { + fs.mkdirSync(uploadsDir, { recursive: true }) +} + +// Configure storage +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, uploadsDir) + }, + filename: (req, file, cb) => { + // Preserve original filename encoding by using Buffer + const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9) + // Keep original extension but sanitize filename + const ext = path.extname(file.originalname || "") + cb(null, uniqueSuffix + ext) + }, +}) + +// File filter +const fileFilter = (req, file, cb) => { + const allowedTypes = [ + "application/pdf", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // .docx + "application/msword", // .doc + "text/plain", + "text/markdown", + ] + + if (allowedTypes.includes(file.mimetype)) { + cb(null, true) + } else { + cb(new Error("File type not supported. Only PDF, DOCX, DOC, TXT, MD are allowed."), false) + } +} + +// Multer instance +export const upload = multer({ + storage: storage, + fileFilter: fileFilter, + limits: { + fileSize: 10 * 1024 * 1024, // 10MB max + }, +}) + +// Single file upload middleware +export const uploadSingle = upload.single("document") diff --git a/meeting-backend/src/models/Document.js b/meeting-backend/src/models/Document.js new file mode 100644 index 0000000..73eb3e6 --- /dev/null +++ b/meeting-backend/src/models/Document.js @@ -0,0 +1,35 @@ +import mongoose from "mongoose" + +const documentSchema = new mongoose.Schema({ + meetingId: { type: mongoose.Schema.Types.ObjectId, ref: "Meeting", required: true }, + roomId: { type: String, required: true }, // For quick lookup + uploadedBy: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true }, + fileName: { type: String, required: true }, + originalName: { type: String, required: true }, + filePath: { type: String, required: true }, + fileSize: { type: Number, required: true }, // in bytes + mimeType: { type: String, required: true }, + status: { type: String, enum: ["processing", "processed", "error"], default: "processing" }, + chunks: [ + { + text: String, + chunkIndex: Number, + embedding: [Number], // Vector embedding + metadata: { + page: Number, + startChar: Number, + endChar: Number, + }, + }, + ], + processedAt: Date, + errorMessage: String, + createdAt: { type: Date, default: Date.now }, + updatedAt: { type: Date, default: Date.now }, +}) + +// Index for vector search (if using MongoDB Atlas) +documentSchema.index({ "chunks.embedding": "2dsphere" }) +documentSchema.index({ meetingId: 1, status: 1 }) + +export default mongoose.model("Document", documentSchema) diff --git a/meeting-backend/src/models/Meeting.js b/meeting-backend/src/models/Meeting.js new file mode 100644 index 0000000..aaaa014 --- /dev/null +++ b/meeting-backend/src/models/Meeting.js @@ -0,0 +1,16 @@ +import mongoose from "mongoose" + +const meetingSchema = new mongoose.Schema({ + title: { type: String, required: true }, + description: String, + createdBy: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true }, + participants: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }], + startTime: Date, + endTime: Date, + status: { type: String, enum: ["scheduled", "ongoing", "completed"], default: "scheduled" }, + roomId: { type: String, unique: true, required: true }, + createdAt: { type: Date, default: Date.now }, + updatedAt: { type: Date, default: Date.now }, +}) + +export default mongoose.model("Meeting", meetingSchema) diff --git a/meeting-backend/src/models/MeetingMinutes.js b/meeting-backend/src/models/MeetingMinutes.js new file mode 100644 index 0000000..bdb95d3 --- /dev/null +++ b/meeting-backend/src/models/MeetingMinutes.js @@ -0,0 +1,41 @@ +import mongoose from "mongoose" + +const meetingMinutesSchema = new mongoose.Schema({ + meetingId: { type: mongoose.Schema.Types.ObjectId, ref: "Meeting", required: true }, + roomId: { type: String, required: true }, // For quick lookup + recordedBy: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true }, + + // Audio file info + audioFileName: { type: String, required: true }, + audioFilePath: { type: String, required: true }, + audioFileSize: { type: Number, required: true }, // in bytes + audioMimeType: { type: String, default: "audio/wav" }, + + // Video file info (optional, for future) + videoFileName: { type: String }, + videoFilePath: { type: String }, + videoFileSize: { type: Number }, + + // Transcription from speech-to-text service + transcription: { type: String }, + transcriptionStatus: { + type: String, + enum: ["pending", "processing", "completed", "error"], + default: "pending" + }, + transcriptionError: { type: String }, + + // Recording metadata + recordingDuration: { type: Number }, // in seconds + startTime: { type: Date, required: true }, + endTime: { type: Date }, + + createdAt: { type: Date, default: Date.now }, + updatedAt: { type: Date, default: Date.now }, +}) + +meetingMinutesSchema.index({ meetingId: 1, roomId: 1 }) +meetingMinutesSchema.index({ recordedBy: 1 }) + +export default mongoose.model("MeetingMinutes", meetingMinutesSchema) + diff --git a/meeting-backend/src/models/User.js b/meeting-backend/src/models/User.js new file mode 100644 index 0000000..9e5fdbc --- /dev/null +++ b/meeting-backend/src/models/User.js @@ -0,0 +1,15 @@ +import mongoose from "mongoose" + +const userSchema = new mongoose.Schema({ + email: { type: String, required: true, unique: true }, + fullName: { type: String, required: true }, + phone: { type: String }, + username: { type: String, unique: true, sparse: true }, // Optional for OAuth users + password: { type: String }, // Optional for OAuth users + googleId: { type: String, unique: true, sparse: true }, // For Google OAuth + role: { type: String, enum: ["admin", "user"], default: "user" }, + approved: { type: Boolean, default: false }, + createdAt: { type: Date, default: Date.now }, +}) + +export default mongoose.model("User", userSchema) diff --git a/meeting-backend/src/routes/auth.js b/meeting-backend/src/routes/auth.js new file mode 100644 index 0000000..a2cbc4d --- /dev/null +++ b/meeting-backend/src/routes/auth.js @@ -0,0 +1,128 @@ +import express from "express" +import bcrypt from "bcryptjs" // Dùng để mã hóa mật khẩu +import jwt from "jsonwebtoken" // Dùng để tạo token đăng nhập (JWT) +import dotenv from "dotenv" // Dùng để đọc biến môi trường (.env) +import User from "../models/User.js" // Import model User để thao tác với MongoDB + +dotenv.config() // Nạp biến môi trường từ file .env +const router = express.Router() // Tạo router Express riêng cho các route /auth + +// Register +router.post("/register", async (req, res) => { + try { + const { email, fullName, phone, password } = req.body + + // Kiểm tra xem người dùng đã tồn tại chưa (theo email hoặc username) + const existing = await User.findOne({ $or: [{ email }, { username: email }] }) + if (existing) return res.status(400).json({ message: "Email đã được đăng ký" }) + + // Mã hóa mật khẩu bằng bcrypt trước khi lưu + const hashedPassword = await bcrypt.hash(password, 10) + + // Tạo user mới (chưa được admin duyệt) + const user = new User({ + email, + fullName, + phone, + username: email, // Dùng email làm username + password: hashedPassword, // Lưu mật khẩu đã mã hóa + role: "user", // Mặc định là người dùng thường + approved: false, // Cần admin duyệt mới được đăng nhập + }) + + // Lưu người dùng vào cơ sở dữ liệu MongoDB + await user.save() + + // Phản hồi về cho client + res.json({ + message: "Đăng ký thành công. Tài khoản sẽ hoạt động sau khi admin duyệt.", + }) + } catch (error) { + // Nếu có lỗi, trả về lỗi 500 + res.status(500).json({ message: error.message }) + } +}) + +// Đăng nhập tài khoản (Login) +router.post("/login", async (req, res) => { + try { + const { email, password } = req.body // Lấy email và mật khẩu từ client gửi lên + + // Tìm người dùng theo email + const user = await User.findOne({ email }) + if (!user) return res.status(400).json({ message: "Email không tồn tại" }) + + // Kiểm tra xem tài khoản đã được admin duyệt chưa + if (!user.approved) { + return res.status(403).json({ message: "Tài khoản của bạn chưa được admin duyệt." }) + } + + // Kiểm tra mật khẩu có đúng không (so sánh với mật khẩu đã mã hóa) + const isMatch = await bcrypt.compare(password, user.password) + if (!isMatch) return res.status(400).json({ message: "Mật khẩu không chính xác" }) + + // Tạo JWT token chứa thông tin người dùng (id, role, email) + const token = jwt.sign( + { id: user._id, role: user.role, email: user.email }, + process.env.JWT_SECRET, + { expiresIn: "7d" } + ) + + // Trả token và thông tin cơ bản của user về cho client + res.json({ + token, + role: user.role, + user: { id: user._id, email: user.email, fullName: user.fullName }, + }) + } catch (error) { + // Nếu có lỗi, trả về lỗi 500 + res.status(500).json({ message: error.message }) + } +}) + +// Đăng nhập bằng tài khoản Google (Google OAuth) +router.post("/google-callback", async (req, res) => { + try { + const { googleId, email, fullName } = req.body // Nhận dữ liệu từ client (sau khi Google xác thực) + + // Tìm người dùng theo googleId + let user = await User.findOne({ googleId }) + + // Nếu chưa có, tạo người dùng mới từ thông tin Google + if (!user) { + user = new User({ + googleId, + email, + fullName, + role: "user", // Mặc định là user + approved: false, // Cần admin duyệt trước khi sử dụng + }) + await user.save() + } + + // Nếu tài khoản chưa được admin duyệt thì chặn lại + if (!user.approved) { + return res.status(403).json({ message: "Tài khoản của bạn chưa được admin duyệt." }) + } + + // Nếu đã được duyệt, tạo token đăng nhập + const token = jwt.sign( + { id: user._id, role: user.role, email: user.email }, + process.env.JWT_SECRET, + { expiresIn: "7d" } + ) + + // Gửi token và thông tin người dùng về client + res.json({ + token, + role: user.role, + user: { id: user._id, email: user.email, fullName: user.fullName }, + }) + } catch (error) { + // Nếu có lỗi, trả về lỗi 500 + res.status(500).json({ message: error.message }) + } +}) + +// Xuất router để có thể dùng trong server.js +export default router diff --git a/meeting-backend/src/routes/document.js b/meeting-backend/src/routes/document.js new file mode 100644 index 0000000..d87f998 --- /dev/null +++ b/meeting-backend/src/routes/document.js @@ -0,0 +1,345 @@ +import express from "express" +import { verifyToken, isAdmin } from "../middleware/authMiddleware.js" +import { uploadSingle } from "../middleware/uploadMiddleware.js" +import Document from "../models/Document.js" +import Meeting from "../models/Meeting.js" +import { processDocument } from "../services/documentProcessor.js" +import { generateRAGAnswer } from "../services/ragService.js" +import path from "path" +import { fileURLToPath } from "url" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const router = express.Router() + +// Upload document for meeting (only admin) +router.post("/upload", verifyToken, isAdmin, uploadSingle, async (req, res) => { + try { + if (!req.file) { + return res.status(400).json({ message: "Không có file được upload" }) + } + + const { meetingId, roomId } = req.body + + if (!meetingId && !roomId) { + return res.status(400).json({ message: "Meeting ID hoặc Room ID là bắt buộc" }) + } + + // Find meeting + let meeting + if (meetingId) { + meeting = await Meeting.findById(meetingId) + } else if (roomId) { + meeting = await Meeting.findOne({ roomId }) + } + + if (!meeting) { + return res.status(404).json({ message: "Cuộc họp không tồn tại" }) + } + + // Fix filename encoding - ensure UTF-8 + // Multer sometimes receives filenames in wrong encoding (latin1 instead of utf-8) + let originalName = req.file.originalname || "" + try { + // If filename contains mojibake characters, try to fix encoding + if (typeof originalName === "string") { + // Check if it looks like mojibake (contains common mojibake patterns) + if (/Ã|â|áº|táº|á»/.test(originalName)) { + console.log(`[Document] Detected potential encoding issue: "${originalName}"`) + // Try to fix: convert from latin1 misinterpretation back to utf-8 + // This handles cases where UTF-8 bytes were read as latin1 + try { + const fixed = Buffer.from(originalName, "latin1").toString("utf-8") + if (fixed && fixed !== originalName && /[àáảãạăằắẳẵặâầấẩẫậèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵđÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸỴĐ]/.test(fixed)) { + console.log(`[Document] Fixed encoding: "${fixed}"`) + originalName = fixed + } + } catch (e) { + console.warn("[Document] Could not fix encoding, using original") + } + } + } + } catch (error) { + console.warn("[Document] Error decoding filename, using original:", error) + } + + // Create document record + const document = new Document({ + meetingId: meeting._id, + roomId: meeting.roomId || roomId, + uploadedBy: req.user.id, + fileName: req.file.filename, + originalName: originalName, + filePath: req.file.path, + fileSize: req.file.size, + mimeType: req.file.mimetype, + status: "processing", + }) + + await document.save() + + // Process document asynchronously (with file path verification) + console.log(`[Document] Starting processing for document ${document._id}: ${document.originalName}`) + console.log(`[Document] File path: ${req.file.path}`) + + // Verify file exists before processing + const fs = (await import("fs")).default + if (!fs.existsSync(req.file.path)) { + document.status = "error" + document.errorMessage = `File not found at path: ${req.file.path}` + await document.save() + return res.status(500).json({ message: "File không tồn tại sau khi upload" }) + } + + processDocument(req.file.path, req.file.mimetype) + .then(async (chunks) => { + console.log(`[Document] Document ${document._id} processed successfully with ${chunks.length} chunks`) + document.chunks = chunks + document.status = "processed" + document.processedAt = new Date() + document.chunksProcessed = chunks.length + await document.save() + console.log(`[Document] Document ${document._id} saved successfully`) + }) + .catch(async (error) => { + console.error(`[Document] Error processing document ${document._id}:`, error) + document.status = "error" + document.errorMessage = error.message || "Lỗi không xác định" + await document.save() + }) + + res.json({ + message: "Tài liệu đã được upload thành công. Đang xử lý...", + document: { + id: document._id, + fileName: document.originalName, + fileSize: document.fileSize, + status: document.status, + }, + }) + } catch (error) { + console.error("Error uploading document:", error) + res.status(500).json({ message: error.message || "Lỗi khi upload tài liệu" }) + } +}) + +// Get documents for meeting +router.get("/meeting/:roomId", verifyToken, async (req, res) => { + try { + const { roomId } = req.params + + const documents = await Document.find({ roomId }) + .populate("uploadedBy", "fullName email") + .sort({ createdAt: -1 }) + + res.json(documents) + } catch (error) { + console.error("Error fetching documents:", error) + res.status(500).json({ message: error.message || "Lỗi khi lấy danh sách tài liệu" }) + } +}) + +// Download document (also support query param token for direct access) +router.get("/download/:id", async (req, res) => { + try { + // Support both header token and query param token + let token = req.headers.authorization?.split(" ")[1] || req.query.token + + if (!token) { + return res.status(401).json({ message: "Token không được cung cấp" }) + } + + // Verify token + const jwt = (await import("jsonwebtoken")).default + const decoded = jwt.verify(token, process.env.JWT_SECRET) + + const document = await Document.findById(req.params.id) + + if (!document) { + return res.status(404).json({ message: "Tài liệu không tồn tại" }) + } + + // Check if file exists + const fs = (await import("fs")).default + if (!fs.existsSync(document.filePath)) { + return res.status(404).json({ message: "File không tồn tại" }) + } + + // Sanitize filename to avoid encoding issues + const safeFileName = document.originalName + .replace(/[^\w\s.-]/g, "_") + .replace(/\s+/g, "_") + .substring(0, 200) // Limit length + + // Set headers for download + res.setHeader("Content-Disposition", `attachment; filename="${safeFileName}"; filename*=UTF-8''${encodeURIComponent(document.originalName)}`) + res.setHeader("Content-Type", document.mimeType || "application/octet-stream") + + // Stream file + fs.createReadStream(document.filePath).pipe(res) + } catch (error) { + console.error("Error downloading document:", error) + if (error.name === "JsonWebTokenError" || error.name === "TokenExpiredError") { + return res.status(401).json({ message: "Token không hợp lệ" }) + } + res.status(500).json({ message: error.message || "Lỗi khi tải tài liệu" }) + } +}) + +// Update document (only admin) +router.put("/:id", verifyToken, isAdmin, uploadSingle, async (req, res) => { + try { + const document = await Document.findById(req.params.id) + + if (!document) { + return res.status(404).json({ message: "Tài liệu không tồn tại" }) + } + + if (!req.file) { + return res.status(400).json({ message: "Không có file được upload" }) + } + + // Delete old file + const fs = (await import("fs")).default + try { + if (fs.existsSync(document.filePath)) { + fs.unlinkSync(document.filePath) + } + } catch (err) { + console.error("Error deleting old file:", err) + } + + // Fix filename encoding + let originalName = req.file.originalname || "" + try { + if (typeof originalName === "string") { + if (/Ã|â|áº|táº|á»/.test(originalName)) { + console.log(`[Document] Detected potential encoding issue: "${originalName}"`) + try { + const fixed = Buffer.from(originalName, "latin1").toString("utf-8") + if (fixed && fixed !== originalName && /[àáảãạăằắẳẵặâầấẩẫậèéẻẽẹêềếểễệìíỉĩịòóỏõọôồốổỗộơờớởỡợùúủũụưừứửữựỳýỷỹỵđÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÈÉẺẼẸÊỀẾỂỄỆÌÍỈĨỊÒÓỎÕỌÔỒỐỔỖỘƠỜỚỞỠỢÙÚỦŨỤƯỪỨỬỮỰỲÝỶỸỴĐ]/.test(fixed)) { + console.log(`[Document] Fixed encoding: "${fixed}"`) + originalName = fixed + } + } catch (e) { + console.warn("[Document] Could not fix encoding, using original") + } + } + } + } catch (error) { + console.warn("[Document] Error decoding filename, using original:", error) + } + + // Update document + document.fileName = req.file.filename + document.originalName = originalName + document.filePath = req.file.path + document.fileSize = req.file.size + document.mimeType = req.file.mimetype + document.status = "processing" + document.chunks = [] + document.processedAt = null + document.chunksProcessed = 0 + document.errorMessage = null + + await document.save() + + // Process document asynchronously + console.log(`[Document] Starting processing for updated document ${document._id}: ${document.originalName}`) + + const fsCheck = (await import("fs")).default + if (!fsCheck.existsSync(req.file.path)) { + document.status = "error" + document.errorMessage = `File not found at path: ${req.file.path}` + await document.save() + return res.status(500).json({ message: "File không tồn tại sau khi upload" }) + } + + processDocument(req.file.path, req.file.mimetype) + .then(async (chunks) => { + console.log(`[Document] Document ${document._id} processed successfully with ${chunks.length} chunks`) + document.chunks = chunks + document.status = "processed" + document.processedAt = new Date() + document.chunksProcessed = chunks.length + await document.save() + console.log(`[Document] Document ${document._id} saved successfully`) + }) + .catch(async (error) => { + console.error(`[Document] Error processing document ${document._id}:`, error) + document.status = "error" + document.errorMessage = error.message || "Lỗi không xác định" + await document.save() + }) + + res.json({ + message: "Tài liệu đã được cập nhật thành công. Đang xử lý...", + document: { + id: document._id, + fileName: document.originalName, + fileSize: document.fileSize, + status: document.status, + }, + }) + } catch (error) { + console.error("Error updating document:", error) + res.status(500).json({ message: error.message || "Lỗi khi cập nhật tài liệu" }) + } +}) + +// Delete document (only admin) +router.delete("/:id", verifyToken, isAdmin, async (req, res) => { + try { + const document = await Document.findById(req.params.id) + + if (!document) { + return res.status(404).json({ message: "Tài liệu không tồn tại" }) + } + + // Delete file + const fs = (await import("fs")).default + try { + fs.unlinkSync(document.filePath) + } catch (err) { + console.error("Error deleting file:", err) + } + + await Document.findByIdAndDelete(req.params.id) + + res.json({ message: "Tài liệu đã được xóa thành công" }) + } catch (error) { + console.error("Error deleting document:", error) + res.status(500).json({ message: error.message || "Lỗi khi xóa tài liệu" }) + } +}) + +// RAG Chat - Ask question about documents +router.post("/rag/chat", verifyToken, async (req, res) => { + try { + const { roomId, query } = req.body + + if (!roomId || !query) { + return res.status(400).json({ message: "Room ID và câu hỏi là bắt buộc" }) + } + + // Generate RAG answer + const result = await generateRAGAnswer(roomId, query) + + res.json({ + query: query, + answer: result.answer, + sources: result.sources, + confidence: result.confidence, + timestamp: new Date(), + }) + } catch (error) { + console.error("Error in RAG chat:", error) + res.status(500).json({ + message: error.message || "Lỗi khi xử lý câu hỏi", + answer: "Xin lỗi, có lỗi xảy ra khi xử lý câu hỏi của bạn.", + }) + } +}) + +export default router diff --git a/meeting-backend/src/routes/meeting.js b/meeting-backend/src/routes/meeting.js new file mode 100644 index 0000000..99baa4b --- /dev/null +++ b/meeting-backend/src/routes/meeting.js @@ -0,0 +1,167 @@ +import express from "express" +import Meeting from "../models/Meeting.js" +import { verifyToken, isAdmin } from "../middleware/authMiddleware.js" +import crypto from "crypto" + +const router = express.Router() + +// Hàm tạo ngẫu nhiên mã phòng họp (roomId) duy nhất +const generateRoomId = () => { + return crypto.randomBytes(8).toString("hex") +} + +// API: Tạo cuộc họp (chỉ Admin) +router.post("/", verifyToken, isAdmin, async (req, res) => { + try { + const { title, description, startTime, endTime } = req.body + + // Tạo mã phòng (roomId) + let roomId = generateRoomId() + let existingMeeting = await Meeting.findOne({ roomId }) + + // Nếu mã phòng bị trùng thì tạo lại cho đến khi unique + while (existingMeeting) { + roomId = generateRoomId() + existingMeeting = await Meeting.findOne({ roomId }) + } + + // Lưu thông tin cuộc họp vào MongoDB + const meeting = new Meeting({ + title, + description, + startTime, + endTime, + roomId, + createdBy: req.user.id, // id admin tạo cuộc họp + participants: [req.user.id], // người tạo tự động tham gia + }) + + await meeting.save() + res.json({ message: "Cuộc họp được tạo thành công", meeting }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Lấy danh sách tất cả cuộc họp +router.get("/", verifyToken, async (req, res) => { + try { + const meetings = await Meeting.find() + .populate("createdBy", "email fullName") // Lấy thêm thông tin người tạo + .populate("participants", "email fullName") // Lấy thêm thông tin người tham gia + .sort({ createdAt: -1 }) // Sắp xếp theo thời gian mới nhất + + res.json(meetings) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Lấy thông tin chi tiết cuộc họp theo ID +router.get("/:id", verifyToken, async (req, res) => { + try { + let meeting = await Meeting.findById(req.params.id) + .populate("createdBy", "email fullName") + .populate("participants", "email fullName") + + if (!meeting) return res.status(404).json({ message: "Cuộc họp không tồn tại" }) + + // Với các bản ghi cũ chưa có roomId, tự động tạo roomId và lưu lại + if (!meeting.roomId) { + let roomId = generateRoomId() + let existingMeeting = await Meeting.findOne({ roomId }) + while (existingMeeting) { + roomId = generateRoomId() + existingMeeting = await Meeting.findOne({ roomId }) + } + + meeting.roomId = roomId + await meeting.save() + } + + res.json(meeting) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Lấy thông tin cuộc họp theo roomId +router.get("/room/:roomId", verifyToken, async (req, res) => { + try { + const meeting = await Meeting.findOne({ roomId: req.params.roomId }) + .populate("createdBy", "email fullName") + .populate("participants", "email fullName") + + if (!meeting) return res.status(404).json({ message: "Phòng họp không tồn tại" }) + res.json(meeting) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Tham gia cuộc họp bằng ID +router.post("/:id/join", verifyToken, async (req, res) => { + try { + const meeting = await Meeting.findById(req.params.id) + if (!meeting) return res.status(404).json({ message: "Cuộc họp không tồn tại" }) + + // Nếu người dùng chưa có trong danh sách, thêm vào + if (!meeting.participants.some((p) => p?.toString() === req.user.id)) { + meeting.participants.push(req.user.id) + await meeting.save() + } + + res.json({ message: "Tham gia cuộc họp thành công", meeting }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Tham gia cuộc họp bằng roomId +router.post("/room/:roomId/join", verifyToken, async (req, res) => { + try { + const meeting = await Meeting.findOne({ roomId: req.params.roomId }) + if (!meeting) return res.status(404).json({ message: "Phòng họp không tồn tại" }) + + if (!meeting.participants.some((p) => p?.toString() === req.user.id)) { + meeting.participants.push(req.user.id) + await meeting.save() + } + + res.json({ message: "Tham gia cuộc họp thành công", meeting }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Cập nhật thông tin cuộc họp (Admin) +router.put("/:id", verifyToken, isAdmin, async (req, res) => { + try { + const { title, description, startTime, endTime, status } = req.body + + const meeting = await Meeting.findByIdAndUpdate( + req.params.id, + { title, description, startTime, endTime, status, updatedAt: Date.now() }, + { new: true } // trả về bản ghi sau khi update + ) + + if (!meeting) return res.status(404).json({ message: "Cuộc họp không tồn tại" }) + + res.json({ message: "Cập nhật cuộc họp thành công", meeting }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// API: Xoá cuộc họp (Admin) +router.delete("/:id", verifyToken, isAdmin, async (req, res) => { + try { + const meeting = await Meeting.findByIdAndDelete(req.params.id) + if (!meeting) return res.status(404).json({ message: "Cuộc họp không tồn tại" }) + res.json({ message: "Xóa cuộc họp thành công" }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +export default router diff --git a/meeting-backend/src/routes/minutes.js b/meeting-backend/src/routes/minutes.js new file mode 100644 index 0000000..b54e175 --- /dev/null +++ b/meeting-backend/src/routes/minutes.js @@ -0,0 +1,240 @@ +import express from "express" +import { verifyToken } from "../middleware/authMiddleware.js" +import { uploadAudioSingle } from "../middleware/uploadAudioMiddleware.js" +import MeetingMinutes from "../models/MeetingMinutes.js" +import Meeting from "../models/Meeting.js" +import fs from "fs" +import path from "path" +import { fileURLToPath } from "url" +import FormData from "form-data" +import axios from "axios" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const router = express.Router() + +// Upload recording and process with speech-to-text +router.post("/upload", verifyToken, uploadAudioSingle, async (req, res) => { + try { + if (!req.file) { + return res.status(400).json({ message: "Không có file được upload" }) + } + + const { roomId, recordingDuration, startTime, endTime } = req.body + + if (!roomId) { + return res.status(400).json({ message: "Room ID là bắt buộc" }) + } + + // Find meeting + const meeting = await Meeting.findOne({ roomId }) + if (!meeting) { + return res.status(404).json({ message: "Cuộc họp không tồn tại" }) + } + + // Create meeting minutes record + const meetingMinutes = new MeetingMinutes({ + meetingId: meeting._id, + roomId: roomId, + recordedBy: req.user.id, + audioFileName: req.file.filename, + audioFilePath: req.file.path, + audioFileSize: req.file.size, + audioMimeType: req.file.mimetype, + recordingDuration: recordingDuration ? parseInt(recordingDuration) : null, + startTime: startTime ? new Date(startTime) : new Date(), + endTime: endTime ? new Date(endTime) : new Date(), + transcriptionStatus: "pending", + }) + + await meetingMinutes.save() + + // Process transcription asynchronously + processTranscription(meetingMinutes._id, req.file.path) + .catch((error) => { + console.error(`[MeetingMinutes] Error processing transcription for ${meetingMinutes._id}:`, error) + }) + + res.json({ + message: "File ghi âm đã được upload thành công. Đang xử lý chuyển đổi văn bản...", + minutes: { + id: meetingMinutes._id, + audioFileName: meetingMinutes.audioFileName, + transcriptionStatus: meetingMinutes.transcriptionStatus, + }, + }) + } catch (error) { + console.error("Error uploading meeting minutes:", error) + res.status(500).json({ message: error.message || "Lỗi khi upload file ghi âm" }) + } +}) + +// Process transcription using Python service +async function processTranscription(minutesId, audioFilePath) { + try { + const meetingMinutes = await MeetingMinutes.findById(minutesId) + if (!meetingMinutes) { + console.error(`[MeetingMinutes] Minutes not found: ${minutesId}`) + return + } + + meetingMinutes.transcriptionStatus = "processing" + await meetingMinutes.save() + + // Call Python speech-to-text service + // Adjust the URL based on your Python service configuration + // Try multiple possible endpoints + const PYTHON_SERVICE_URL = process.env.PYTHON_SERVICE_URL || "http://localhost:8000" + const PYTHON_ENDPOINT = process.env.PYTHON_ENDPOINT || "/speech-to-text" + + // Check if Python service URL is configured + if (!PYTHON_SERVICE_URL || PYTHON_SERVICE_URL === "http://localhost:8000") { + console.warn(`[MeetingMinutes] Python service URL not configured, trying default localhost:8000`) + } + + try { + // Read audio file and send to Python service + const formData = new FormData() + formData.append("audio", fs.createReadStream(audioFilePath), { + filename: path.basename(audioFilePath), + contentType: "audio/wav", + }) + + // Use axios to send file to Python service + // Timeout after 5 minutes for long recordings + console.log(`[MeetingMinutes] Calling Python service: ${PYTHON_SERVICE_URL}${PYTHON_ENDPOINT}`) + const response = await axios.post(`${PYTHON_SERVICE_URL}${PYTHON_ENDPOINT}`, formData, { + headers: formData.getHeaders(), + maxContentLength: Infinity, + maxBodyLength: Infinity, + timeout: 300000, // 5 minutes + }) + + if (response.data && response.data.transcription) { + meetingMinutes.transcription = response.data.transcription + meetingMinutes.transcriptionStatus = "completed" + await meetingMinutes.save() + console.log(`[MeetingMinutes] Transcription completed for ${minutesId}`) + } else if (response.data && response.data.text) { + // Alternative response format + meetingMinutes.transcription = response.data.text + meetingMinutes.transcriptionStatus = "completed" + await meetingMinutes.save() + console.log(`[MeetingMinutes] Transcription completed for ${minutesId}`) + } else { + throw new Error("Không nhận được dữ liệu transcription từ service") + } + } catch (axiosError) { + // If Python service is not available, just log and mark as error + console.error(`[MeetingMinutes] Python service error:`, axiosError.message) + meetingMinutes.transcriptionStatus = "error" + meetingMinutes.transcriptionError = axiosError.message || "Không thể kết nối đến Python service" + await meetingMinutes.save() + } + } catch (error) { + console.error(`[MeetingMinutes] Error processing transcription:`, error) + const meetingMinutes = await MeetingMinutes.findById(minutesId) + if (meetingMinutes) { + meetingMinutes.transcriptionStatus = "error" + meetingMinutes.transcriptionError = error.message || "Lỗi không xác định" + await meetingMinutes.save() + } + } +} + +// Get meeting minutes for a room +router.get("/meeting/:roomId", verifyToken, async (req, res) => { + try { + const { roomId } = req.params + + const minutes = await MeetingMinutes.find({ roomId }) + .populate("recordedBy", "fullName email") + .sort({ createdAt: -1 }) + + res.json(minutes) + } catch (error) { + console.error("Error fetching meeting minutes:", error) + res.status(500).json({ message: error.message || "Lỗi khi lấy danh sách biên bản" }) + } +}) + +// Get single meeting minutes by ID +router.get("/:id", verifyToken, async (req, res) => { + try { + const minutes = await MeetingMinutes.findById(req.params.id) + .populate("recordedBy", "fullName email") + .populate("meetingId", "title description") + + if (!minutes) { + return res.status(404).json({ message: "Biên bản không tồn tại" }) + } + + res.json(minutes) + } catch (error) { + console.error("Error fetching meeting minutes:", error) + res.status(500).json({ message: error.message || "Lỗi khi lấy biên bản" }) + } +}) + +// Download audio file +router.get("/:id/audio", verifyToken, async (req, res) => { + try { + const minutes = await MeetingMinutes.findById(req.params.id) + + if (!minutes) { + return res.status(404).json({ message: "Biên bản không tồn tại" }) + } + + // Check if file exists + if (!fs.existsSync(minutes.audioFilePath)) { + return res.status(404).json({ message: "File audio không tồn tại" }) + } + + // Set headers for audio playback + res.setHeader("Content-Type", minutes.audioMimeType || "audio/wav") + res.setHeader("Content-Length", minutes.audioFileSize) + res.setHeader("Accept-Ranges", "bytes") + + // Stream file + fs.createReadStream(minutes.audioFilePath).pipe(res) + } catch (error) { + console.error("Error downloading audio:", error) + res.status(500).json({ message: error.message || "Lỗi khi tải file audio" }) + } +}) + +// Delete meeting minutes +router.delete("/:id", verifyToken, async (req, res) => { + try { + const minutes = await MeetingMinutes.findById(req.params.id) + + if (!minutes) { + return res.status(404).json({ message: "Biên bản không tồn tại" }) + } + + // Chỉ admin mới có thể xóa biên bản + if (req.user.role !== "admin") { + return res.status(403).json({ message: "Chỉ admin mới có quyền xóa biên bản" }) + } + + // Delete audio file + try { + if (fs.existsSync(minutes.audioFilePath)) { + fs.unlinkSync(minutes.audioFilePath) + } + } catch (err) { + console.error("Error deleting audio file:", err) + } + + await MeetingMinutes.findByIdAndDelete(req.params.id) + + res.json({ message: "Biên bản đã được xóa thành công" }) + } catch (error) { + console.error("Error deleting meeting minutes:", error) + res.status(500).json({ message: error.message || "Lỗi khi xóa biên bản" }) + } +}) + +export default router + diff --git a/meeting-backend/src/routes/user.js b/meeting-backend/src/routes/user.js new file mode 100644 index 0000000..8de6f36 --- /dev/null +++ b/meeting-backend/src/routes/user.js @@ -0,0 +1,64 @@ +import express from "express" +import User from "../models/User.js" +import { verifyToken, isAdmin } from "../middleware/authMiddleware.js" + +const router = express.Router() + +// Lấy danh sách người dùng đang chờ duyệt - admin (GET /users/pending) +router.get("/pending", verifyToken, isAdmin, async (req, res) => { + try { + const pendingUsers = await User.find( + { approved: false }, + "email fullName phone role createdAt" + ) + // Gửi danh sách người dùng chờ duyệt về client + res.json(pendingUsers) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// Thống kê tổng số người dùng (GET /users/stats) +router.get("/stats", verifyToken, isAdmin, async (req, res) => { + try { + const totalUsers = await User.countDocuments() + const pendingUsers = await User.countDocuments({ approved: false }) + const approvedUsers = await User.countDocuments({ approved: true }) + + res.json({ totalUsers, pendingUsers, approvedUsers }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// Duyệt tài khoản người dùng (PATCH /users/approve/:id) +router.patch("/approve/:id", verifyToken, isAdmin, async (req, res) => { + try { + // Tìm user theo id được truyền trong URL + const user = await User.findById(req.params.id) + if (!user) return res.status(404).json({ message: "User not found" }) + + // Cập nhật trạng thái approved = true + user.approved = true + await user.save() + + // Gửi phản hồi về client + res.json({ message: `User ${user.email} đã được duyệt.` }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +// Xóa tài khoản người dùng (DELETE /users/:id) +router.delete("/:id", verifyToken, isAdmin, async (req, res) => { + try { + // Xóa user theo id được truyền trong URL + await User.findByIdAndDelete(req.params.id) + + res.json({ message: "User đã bị xóa." }) + } catch (error) { + res.status(500).json({ message: error.message }) + } +}) + +export default router diff --git a/meeting-backend/src/server.js b/meeting-backend/src/server.js new file mode 100644 index 0000000..bd43d3f --- /dev/null +++ b/meeting-backend/src/server.js @@ -0,0 +1,44 @@ +import express from "express"; +import cors from "cors"; +import dotenv from "dotenv"; +import { createServer } from "http"; +import { Server } from "socket.io"; +import connectDB from "./config/db.js"; +import authRoutes from "./routes/auth.js"; +import meetingRoutes from "./routes/meeting.js"; +import userRoutes from "./routes/user.js"; +import documentRoutes from "./routes/document.js"; +import minutesRoutes from "./routes/minutes.js"; +import { initializeSocket } from "./socket/socketHandler.js"; + +dotenv.config(); +connectDB(); + +const app = express(); +app.use(cors()); +app.use(express.json()); + +// Create HTTP server +const httpServer = createServer(app); + +// Initialize Socket.IO with CORS configuration +const io = new Server(httpServer, { + cors: { + origin: process.env.CLIENT_URL || "https://bkmeeting.soict.io", + methods: ["GET", "POST"], + credentials: true, + }, +}); + +// Initialize socket handlers +initializeSocket(io); + +// Routes +app.use("/api/auth", authRoutes); +app.use("/api/meetings", meetingRoutes); +app.use("/api/users", userRoutes); +app.use("/api/documents", documentRoutes); +app.use("/api/minutes", minutesRoutes); + +const PORT = process.env.PORT || 5000; +httpServer.listen(PORT, () => console.log(`Server running on port ${PORT}`)); diff --git a/meeting-backend/src/services/documentProcessor.js b/meeting-backend/src/services/documentProcessor.js new file mode 100644 index 0000000..288f50a --- /dev/null +++ b/meeting-backend/src/services/documentProcessor.js @@ -0,0 +1,242 @@ +import fs from "fs/promises" +import mammoth from "mammoth" +import OpenAI from "openai" +import dotenv from "dotenv" + +dotenv.config() + +// Lazy initialization of OpenRouter client (compatible with OpenAI SDK) +// OpenRouter provides free API access at https://openrouter.ai +let openai = null +const getOpenAI = () => { + if (!openai) { + const apiKey = process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY + if (!apiKey) { + throw new Error("OPENROUTER_API_KEY or OPENAI_API_KEY not configured in .env file. Get your free API key at https://openrouter.ai/settings/keys") + } + openai = new OpenAI({ + apiKey: apiKey, + baseURL: "https://openrouter.ai/api/v1", // OpenRouter API endpoint + defaultHeaders: { + "HTTP-Referer": process.env.OPENROUTER_HTTP_REFERER || "http://bkmeeting.soict.io:5000", // Optional: for tracking + "X-Title": process.env.OPENROUTER_APP_NAME || "Meeting App", // Optional: for tracking + }, + }) + } + return openai +} + +// Dynamic import for pdf-parse to avoid ESM issue with test files +let pdfParse = null +let pdfParseLoading = false +const loadPdfParse = async () => { + if (pdfParse) return pdfParse + if (pdfParseLoading) { + // Wait if already loading + while (pdfParseLoading) { + await new Promise((resolve) => setTimeout(resolve, 100)) + } + return pdfParse + } + + pdfParseLoading = true + try { + // Create test file before importing to avoid ENOENT error + // pdf-parse tries to read a test file on module load + const fs = await import("fs/promises") + const path = await import("path") + const { fileURLToPath } = await import("url") + const __filename = fileURLToPath(import.meta.url) + const __dirname = path.dirname(__filename) + + const testDir = path.join(__dirname, "../../node_modules/pdf-parse/test/data") + const testFile = path.join(testDir, "05-versions-space.pdf") + + try { + await fs.mkdir(testDir, { recursive: true }) + // Create an empty dummy file if it doesn't exist + try { + await fs.access(testFile) + } catch { + await fs.writeFile(testFile, Buffer.alloc(0)) + } + } catch (err) { + // Ignore errors, try to continue anyway + console.warn("[DocumentProcessor] Could not create pdf-parse test file:", err.message) + } + + // Use dynamic import with error handling + const pdfParseModule = await import("pdf-parse").catch((err) => { + console.error("[DocumentProcessor] Error importing pdf-parse:", err) + throw new Error("Failed to load PDF parser") + }) + pdfParse = pdfParseModule.default || pdfParseModule + } finally { + pdfParseLoading = false + } + return pdfParse +} + +// Chunk text into smaller pieces for embedding +export const chunkText = (text, chunkSize = 500, overlap = 50, maxChunks = 500) => { + const chunks = [] + let start = 0 + + while (start < text.length && chunks.length < maxChunks) { + const end = Math.min(start + chunkSize, text.length) + const chunk = text.slice(start, end).trim() + + if (chunk.length > 0) { + chunks.push({ + text: chunk, + startChar: start, + endChar: end, + }) + } + + // Move forward with overlap + start = end - overlap + } + + // Log warning if text was truncated + if (start < text.length) { + console.warn(`[DocumentProcessor] Text truncated: ${text.length} chars -> ${chunks.length} chunks (max ${maxChunks})`) + } + + return chunks +} + +// Extract text from different file types +export const extractText = async (filePath, mimeType) => { + try { + if (mimeType === "application/pdf") { + // Verify file exists first + try { + await fs.access(filePath) + } catch (error) { + throw new Error(`PDF file not found: ${filePath}`) + } + + const pdfParseLib = await loadPdfParse() + const dataBuffer = await fs.readFile(filePath) + const data = await pdfParseLib(dataBuffer) + return data.text || "" + } else if ( + mimeType === + "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + ) { + const result = await mammoth.extractRawText({ path: filePath }) + return result.value + } else if (mimeType === "text/plain" || mimeType.includes("text/")) { + const data = await fs.readFile(filePath, "utf-8") + return data + } else { + throw new Error(`Unsupported file type: ${mimeType}`) + } + } catch (error) { + console.error("Error extracting text:", error) + throw error + } +} + +// Generate embeddings using OpenAI (with batching to avoid memory issues) +export const generateEmbeddings = async (texts, batchSize = 100) => { + try { + const client = getOpenAI() + const allEmbeddings = [] + + // Process in batches to avoid memory issues + for (let i = 0; i < texts.length; i += batchSize) { + const batch = texts.slice(i, i + batchSize) + console.log(`[DocumentProcessor] Generating embeddings for batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(texts.length / batchSize)} (${batch.length} chunks)...`) + + const response = await client.embeddings.create({ + model: "openai/text-embedding-3-small", // OpenRouter model format: provider/model-name + input: batch, + }) + + allEmbeddings.push(...response.data.map((item) => item.embedding)) + + // Small delay to avoid rate limiting + if (i + batchSize < texts.length) { + await new Promise((resolve) => setTimeout(resolve, 100)) + } + } + + return allEmbeddings + } catch (error) { + console.error("Error generating embeddings:", error) + throw error + } +} + +// Process document: extract -> chunk -> embed +export const processDocument = async (filePath, mimeType) => { + try { + // Step 1: Extract text + console.log("Extracting text from document...") + const fullText = await extractText(filePath, mimeType) + + if (!fullText || fullText.trim().length === 0) { + throw new Error("No text extracted from document") + } + + // Step 2: Chunk text (with limits to avoid memory issues) + console.log(`[DocumentProcessor] Chunking text (${fullText.length} chars)...`) + // Limit text length to ~250KB to avoid memory issues (500 chunks * 500 chars) + const maxTextLength = 250000 + const textToProcess = fullText.length > maxTextLength + ? fullText.substring(0, maxTextLength) + : fullText + + if (fullText.length > maxTextLength) { + console.warn(`[DocumentProcessor] Document text truncated from ${fullText.length} to ${maxTextLength} chars to avoid memory issues`) + } + + const textChunks = chunkText(textToProcess, 500, 50, 500) // Max 500 chunks + console.log(`[DocumentProcessor] Created ${textChunks.length} chunks`) + + if (textChunks.length === 0) { + throw new Error("No chunks created from document") + } + + // Step 3: Generate embeddings in batches to avoid memory issues + console.log(`[DocumentProcessor] Generating embeddings for ${textChunks.length} chunks (in batches)...`) + const chunkTexts = textChunks.map((chunk) => chunk.text) + + // Limit chunk text length to avoid token limits (embedding model has token limits) + const limitedChunkTexts = chunkTexts.map((text) => { + // Limit to ~8000 characters (roughly 2000 tokens for embedding model) + if (text.length > 8000) { + return text.substring(0, 8000) + } + return text + }) + + const embeddings = await generateEmbeddings(limitedChunkTexts, 50) // Smaller batch size: 50 + + // Step 4: Combine chunks with embeddings + const processedChunks = textChunks.map((chunk, index) => { + const embedding = embeddings[index] + if (!embedding || embedding.length === 0) { + console.warn(`[DocumentProcessor] Chunk ${index} has no embedding`) + } + return { + text: chunk.text, + chunkIndex: index, + embedding: embedding || [], + metadata: { + page: 1, // PDF parsing would provide page numbers + startChar: chunk.startChar, + endChar: chunk.endChar, + }, + } + }) + + console.log(`[DocumentProcessor] Processed ${processedChunks.length} chunks with embeddings`) + return processedChunks + } catch (error) { + console.error("Error processing document:", error) + throw error + } +} diff --git a/meeting-backend/src/services/ragService.js b/meeting-backend/src/services/ragService.js new file mode 100644 index 0000000..2042163 --- /dev/null +++ b/meeting-backend/src/services/ragService.js @@ -0,0 +1,206 @@ +import OpenAI from "openai" +import Document from "../models/Document.js" +import dotenv from "dotenv" +import { generateEmbeddings } from "./documentProcessor.js" + +dotenv.config() + +// Lazy initialization of OpenRouter client (compatible with OpenAI SDK) +// OpenRouter provides free API access at https://openrouter.ai +let openai = null +const getOpenAI = () => { + if (!openai) { + const apiKey = process.env.OPENROUTER_API_KEY || process.env.OPENAI_API_KEY + if (!apiKey) { + throw new Error("OPENROUTER_API_KEY or OPENAI_API_KEY not configured in .env file. Get your free API key at https://openrouter.ai/settings/keys") + } + openai = new OpenAI({ + apiKey: apiKey, + baseURL: "https://openrouter.ai/api/v1", // OpenRouter API endpoint + defaultHeaders: { + "HTTP-Referer": process.env.OPENROUTER_HTTP_REFERER || "http://bkmeeting.soict.io:5000", // Optional: for tracking + "X-Title": process.env.OPENROUTER_APP_NAME || "Meeting App", // Optional: for tracking + }, + }) + } + return openai +} + +// Cosine similarity for vector comparison +const cosineSimilarity = (vecA, vecB) => { + if (vecA.length !== vecB.length) return 0 + + let dotProduct = 0 + let normA = 0 + let normB = 0 + + for (let i = 0; i < vecA.length; i++) { + dotProduct += vecA[i] * vecB[i] + normA += vecA[i] * vecA[i] + normB += vecB[i] * vecB[i] + } + + return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB)) +} + +// Retrieve relevant chunks based on query +export const retrieveRelevantChunks = async (roomId, query, topK = 5) => { + try { + console.log(`[RAG] Retrieving chunks for roomId: ${roomId}, query: "${query}"`) + + // Step 1: Get all processed documents for this meeting + const documents = await Document.find({ + roomId: roomId, + status: "processed", + }).populate("uploadedBy", "fullName email") + + console.log(`[RAG] Found ${documents.length} processed documents for room ${roomId}`) + + if (documents.length === 0) { + // Check if there are any documents at all + const allDocs = await Document.find({ roomId }).select("status originalName") + console.log(`[RAG] Total documents in room: ${allDocs.length}`) + allDocs.forEach((doc) => { + console.log(`[RAG] - ${doc.originalName}: status=${doc.status}`) + }) + return [] + } + + // Check if documents have chunks + let totalChunks = 0 + documents.forEach((doc) => { + totalChunks += doc.chunks?.length || 0 + }) + console.log(`[RAG] Total chunks across all documents: ${totalChunks}`) + + if (totalChunks === 0) { + console.log(`[RAG] No chunks found in processed documents`) + return [] + } + + // Step 2: Convert query to embedding + console.log(`[RAG] Generating query embedding...`) + const [queryEmbedding] = await generateEmbeddings([query]) + console.log(`[RAG] Query embedding generated, length: ${queryEmbedding.length}`) + + // Step 3: Calculate similarity for all chunks + const chunkScores = [] + + documents.forEach((doc) => { + if (!doc.chunks || doc.chunks.length === 0) { + console.log(`[RAG] Document ${doc.originalName} has no chunks`) + return + } + + doc.chunks.forEach((chunk, idx) => { + if (chunk.embedding && Array.isArray(chunk.embedding) && chunk.embedding.length > 0) { + const similarity = cosineSimilarity(queryEmbedding, chunk.embedding) + chunkScores.push({ + chunk: chunk, + similarity: similarity, + document: { + fileName: doc.originalName || doc.fileName, + uploadedBy: doc.uploadedBy?.fullName || "Unknown", + uploadedAt: doc.createdAt, + }, + }) + } else { + console.log(`[RAG] Chunk ${idx} in ${doc.originalName} has no valid embedding`) + } + }) + }) + + console.log(`[RAG] Calculated similarity for ${chunkScores.length} chunks`) + + // Step 4: Sort by similarity and return top K + chunkScores.sort((a, b) => b.similarity - a.similarity) + const topChunks = chunkScores.slice(0, topK) + + console.log(`[RAG] Returning top ${topChunks.length} chunks`) + if (topChunks.length > 0) { + console.log(`[RAG] Top similarity: ${topChunks[0].similarity.toFixed(4)}`) + } + + return topChunks + } catch (error) { + console.error("[RAG] Error retrieving chunks:", error) + throw error + } +} + +// Generate answer using RAG +export const generateRAGAnswer = async (roomId, query) => { + try { + // Step 1: Retrieve relevant chunks + const relevantChunks = await retrieveRelevantChunks(roomId, query, 5) + + if (relevantChunks.length === 0) { + return { + answer: "Xin lỗi, không tìm thấy thông tin liên quan trong các tài liệu đã upload. Vui lòng upload tài liệu hoặc hỏi câu hỏi khác.", + sources: [], + confidence: 0, + } + } + + // Step 2: Build context from relevant chunks + const context = relevantChunks + .map( + (item, index) => + `[Tài liệu ${index + 1}: ${item.document.fileName}]\n${item.chunk.text}` + ) + .join("\n\n---\n\n") + + // Step 3: Generate answer using GPT with context + const prompt = `Bạn là một trợ lý AI giúp trả lời câu hỏi dựa trên các tài liệu đã được upload trong cuộc họp. + +Các đoạn tài liệu liên quan: +${context} + +Câu hỏi của người dùng: ${query} + +Yêu cầu: +1. Trả lời câu hỏi dựa trên các đoạn tài liệu trên +2. Nếu không đủ thông tin, nói rõ "Không đủ thông tin trong tài liệu" +3. Trích dẫn nguồn (tên file) khi có thể +4. Trả lời bằng tiếng Việt, ngắn gọn và chính xác + +Trả lời:` + + const client = getOpenAI() + const response = await client.chat.completions.create({ + model: "openai/gpt-3.5-turbo", // OpenRouter model format: provider/model-name + messages: [ + { + role: "system", + content: + "Bạn là trợ lý AI giúp trả lời câu hỏi dựa trên tài liệu. Trả lời bằng tiếng Việt, ngắn gọn và chính xác.", + }, + { + role: "user", + content: prompt, + }, + ], + temperature: 0.7, + max_tokens: 500, + }) + + const answer = response.choices[0].message.content + + // Step 4: Extract sources + const sources = relevantChunks.map((item) => ({ + fileName: item.document.fileName, + uploadedBy: item.document.uploadedBy, + similarity: item.similarity, + text: (item.chunk.text || "").substring(0, 200) + "...", // Preview + })) + + return { + answer: answer, + sources: sources, + confidence: relevantChunks[0]?.similarity || 0, + } + } catch (error) { + console.error("Error generating RAG answer:", error) + throw error + } +} diff --git a/meeting-backend/src/socket/socketHandler.js b/meeting-backend/src/socket/socketHandler.js new file mode 100644 index 0000000..f1302a9 --- /dev/null +++ b/meeting-backend/src/socket/socketHandler.js @@ -0,0 +1,470 @@ +import jwt from "jsonwebtoken" +import User from "../models/User.js" +import Meeting from "../models/Meeting.js" +import dotenv from "dotenv" +import crypto from "crypto" + +dotenv.config() + +// Danh sách các phòng họp đang hoạt động (roomId → Map các người tham gia) +const activeRooms = new Map() + +// Bản đồ ánh xạ userId → socketId (để gửi tin nhắn riêng - private message) +const userSocketMap = new Map() + + +// =============================== +// 🚀 Hàm khởi tạo Socket.IO +// =============================== +export const initializeSocket = (io) => { + + // 🧩 Middleware xác thực mỗi khi có client kết nối qua socket + io.use(async (socket, next) => { + try { + // Lấy token từ client (gửi kèm trong phần auth hoặc header) + const token = + socket.handshake.auth.token || + socket.handshake.headers.authorization?.split(" ")[1] + + if (!token) { + return next(new Error("Token không được cung cấp")) + } + + // Giải mã token để xác định người dùng + const decoded = jwt.verify(token, process.env.JWT_SECRET) + const user = await User.findById(decoded.id) + + // Nếu user không tồn tại hoặc chưa được admin duyệt → từ chối kết nối + if (!user || !user.approved) { + return next(new Error("Người dùng chưa được phê duyệt")) + } + + // Lưu thông tin user vào socket (để dùng ở các sự kiện sau) + socket.user = { + id: user._id.toString(), + email: user.email, + fullName: user.fullName, + role: user.role, // Thêm role để kiểm tra admin + } + + next() // Cho phép kết nối tiếp tục + } catch (error) { + next(new Error("Token không hợp lệ")) + } + }) + + + // =============================== + // 🔌 Xử lý khi người dùng kết nối thành công + // =============================== + io.on("connection", (socket) => { + console.log(`User connected: ${socket.user.fullName} (${socket.id})`) + + // Lưu ánh xạ user → socket (để hỗ trợ gửi tin nhắn riêng) + userSocketMap.set(socket.user.id, socket.id) + + + // ===================================== + // 👥 Sự kiện: Người dùng tham gia phòng họp + // ===================================== + socket.on("join-meeting", async (data) => { + try { + const { roomId, meetingId } = data + + // Kiểm tra tham số đầu vào + if (!roomId && !meetingId) { + socket.emit("error", { message: "Room ID hoặc Meeting ID là bắt buộc" }) + return + } + + // Tìm thông tin cuộc họp trong MongoDB + let meeting + if (meetingId) { + meeting = await Meeting.findById(meetingId) + } else if (roomId) { + meeting = await Meeting.findOne({ roomId }) + } + + if (!meeting) { + socket.emit("error", { message: "Phòng họp không tồn tại" }) + return + } + + // ✅ Thêm người dùng vào danh sách participants trong DB nếu chưa có + if (!meeting.participants.includes(socket.user.id)) { + meeting.participants.push(socket.user.id) + await meeting.save() + } + + // ✅ Socket tham gia vào phòng tương ứng (theo roomId) + socket.join(meeting.roomId) + + // ✅ Nếu phòng chưa có trong RAM, khởi tạo mới + if (!activeRooms.has(meeting.roomId)) { + activeRooms.set(meeting.roomId, new Map()) + } + + // Lấy danh sách thành viên đang online trong phòng đó + const roomParticipants = activeRooms.get(meeting.roomId) + + // Loại bỏ các entry cũ của cùng user (trường hợp refresh/reconnect) + for (const [sId, p] of roomParticipants.entries()) { + if (p.userId === socket.user.id) { + roomParticipants.delete(sId) + } + } + + // Thêm người mới vào danh sách người đang hoạt động + roomParticipants.set(socket.id, { + userId: socket.user.id, + userName: socket.user.fullName, + socketId: socket.id, + joinedAt: new Date(), + }) + + // 🔄 Nếu cuộc họp đang ở trạng thái “đã lên lịch” → chuyển sang “đang diễn ra” + if (meeting.status === "scheduled") { + meeting.status = "ongoing" + await meeting.save() + } + + // ✅ Gửi phản hồi cho chính người dùng là họ đã tham gia thành công + socket.emit("joined-meeting", { + meetingId: meeting._id.toString(), + roomId: meeting.roomId, + title: meeting.title, + description: meeting.description, + }) + + // 🔔 Gửi thông báo đến những người khác trong phòng rằng có người mới vào + // Dedupe theo userId để không hiển thị trùng + const seen = new Set() + const participantsList = [] + for (const p of roomParticipants.values()) { + if (!seen.has(p.userId)) { + seen.add(p.userId) + participantsList.push(p) + } + } + socket.to(meeting.roomId).emit("user-joined", { + user: { + id: socket.user.id, + name: socket.user.fullName, + }, + participants: participantsList, + }) + + // 👥 Gửi danh sách người đang trong phòng cho người vừa mới vào + socket.emit("current-participants", { participants: participantsList }) + + console.log(`${socket.user.fullName} joined room ${meeting.roomId}`) + } catch (error) { + console.error("Error joining meeting:", error) + socket.emit("error", { message: "Lỗi khi tham gia cuộc họp" }) + } + }) + + + // ===================================== + // 🚪 Sự kiện: Rời khỏi phòng họp + // ===================================== + socket.on("leave-meeting", async (data) => { + try { + const { roomId } = data + + if (roomId && activeRooms.has(roomId)) { + const roomParticipants = activeRooms.get(roomId) + roomParticipants.delete(socket.id) // Xóa người này khỏi danh sách + + // Nếu phòng trống → xóa khỏi danh sách activeRooms + if (roomParticipants.size === 0) { + activeRooms.delete(roomId) + } else { + // Gửi thông báo cho những người còn lại (loại trùng theo userId) + const seen = new Set() + const uniqueList = [] + for (const p of roomParticipants.values()) { + if (!seen.has(p.userId)) { + seen.add(p.userId) + uniqueList.push(p) + } + } + socket.to(roomId).emit("user-left", { + user: { + id: socket.user.id, + name: socket.user.fullName, + }, + participants: uniqueList, + }) + } + + // Socket rời khỏi phòng + socket.leave(roomId) + console.log(`${socket.user.fullName} left room ${roomId}`) + } + } catch (error) { + console.error("Error leaving meeting:", error) + } + }) + + + // ===================================== + // 💬 Sự kiện: Gửi tin nhắn (công khai hoặc riêng tư) + // ===================================== + socket.on("chat-message", (data) => { + const { roomId, message, targetUserId, messageType = "public" } = data + + if (!roomId || !message) return + + const messageData = { + id: crypto.randomBytes(8).toString("hex"), + userId: socket.user.id, + userName: socket.user.fullName, + message, + timestamp: new Date(), + type: messageType, + targetUserId: targetUserId || null, + } + + // 🔒 Tin nhắn riêng tư (1-1) + if (messageType === "private" && targetUserId) { + const targetSocketId = userSocketMap.get(targetUserId) + + if (targetSocketId) { + // Gửi tin nhắn cho người nhận + io.to(targetSocketId).emit("chat-message", messageData) + // Gửi lại cho người gửi để hiển thị trong UI + socket.emit("chat-message", messageData) + } else { + socket.emit("error", { message: "Người dùng không trực tuyến" }) + } + } else { + // 🌐 Tin nhắn công khai - gửi đến tất cả trong phòng + io.to(roomId).emit("chat-message", messageData) + } + }) + + + // ===================================== + // ✍️ Sự kiện: Người dùng đang nhập (typing) + // ===================================== + socket.on("typing", (data) => { + const { roomId, isTyping } = data + if (roomId) { + // Gửi thông báo cho các thành viên khác trong phòng + socket.to(roomId).emit("typing", { + userId: socket.user.id, + userName: socket.user.fullName, + isTyping, + }) + } + }) + + + // ===================================== + // ❌ Sự kiện: Ngắt kết nối (đóng tab, mất mạng, v.v.) + // ===================================== + socket.on("disconnect", async () => { + console.log(`User disconnected: ${socket.user.fullName} (${socket.id})`) + + // Xóa ánh xạ user → socket + userSocketMap.delete(socket.user.id) + + // Xóa user khỏi tất cả phòng đang hoạt động + for (const [roomId, participants] of activeRooms.entries()) { + if (participants.has(socket.id)) { + participants.delete(socket.id) + + if (participants.size === 0) { + activeRooms.delete(roomId) + } else { + // Thông báo cho người khác trong phòng (loại trùng theo userId) + const seen = new Set() + const uniqueList = [] + for (const p of participants.values()) { + if (!seen.has(p.userId)) { + seen.add(p.userId) + uniqueList.push(p) + } + } + socket.to(roomId).emit("user-left", { + user: { + id: socket.user.id, + name: socket.user.fullName, + }, + participants: uniqueList, + }) + } + } + } + }) + + + // ===================================== + // ⚠️ Xử lý lỗi socket + // ===================================== + socket.on("error", (error) => { + console.error("Socket error:", error) + }) + + // ===================================== + // 📹 WebRTC Video Call Events + // ===================================== + + // User muốn bật/tắt video/mic/screen share + socket.on("media-toggle", (data) => { + const { roomId, mediaType, enabled } = data + if (roomId) { + // Broadcast state change đến tất cả người trong phòng + socket.to(roomId).emit("media-toggle", { + userId: socket.user.id, + userName: socket.user.fullName, + mediaType, // "video" | "audio" | "screen" + enabled, + }) + } + }) + + // WebRTC Offer (caller gửi offer cho callee) + socket.on("webrtc-offer", (data) => { + const { roomId, targetUserId, offer } = data + console.log(`[Socket] Received webrtc-offer from ${socket.user.id} (${socket.user.fullName}) to ${targetUserId}`) + const targetSocketId = userSocketMap.get(targetUserId) + if (targetSocketId) { + console.log(`[Socket] Relaying webrtc-offer to socket ${targetSocketId} (userId: ${targetUserId})`) + io.to(targetSocketId).emit("webrtc-offer", { + fromUserId: socket.user.id, + fromUserName: socket.user.fullName, + offer, + }) + } else { + console.error(`[Socket] Cannot relay webrtc-offer: targetUserId ${targetUserId} not found in userSocketMap. Current map:`, Array.from(userSocketMap.entries()).map(([uid, sid]) => ({ userId: uid, socketId: sid }))) + } + }) + + // WebRTC Answer (callee trả lời offer) + socket.on("webrtc-answer", (data) => { + const { roomId, targetUserId, answer } = data + console.log(`[Socket] Received webrtc-answer from ${socket.user.id} (${socket.user.fullName}) to ${targetUserId}`) + const targetSocketId = userSocketMap.get(targetUserId) + if (targetSocketId) { + console.log(`[Socket] Relaying webrtc-answer to socket ${targetSocketId} (userId: ${targetUserId})`) + io.to(targetSocketId).emit("webrtc-answer", { + fromUserId: socket.user.id, + fromUserName: socket.user.fullName, + answer, + }) + } else { + console.error(`[Socket] Cannot relay webrtc-answer: targetUserId ${targetUserId} not found in userSocketMap`) + } + }) + + // ICE Candidate (thông tin kết nối mạng) + socket.on("webrtc-ice-candidate", (data) => { + const { roomId, targetUserId, candidate } = data + const targetSocketId = userSocketMap.get(targetUserId) + if (targetSocketId) { + io.to(targetSocketId).emit("webrtc-ice-candidate", { + fromUserId: socket.user.id, + candidate, + }) + } else { + console.warn(`[Socket] Cannot relay webrtc-ice-candidate: targetUserId ${targetUserId} not found`) + } + }) + + // User kết thúc call + socket.on("webrtc-end-call", (data) => { + const { roomId } = data + if (roomId) { + socket.to(roomId).emit("webrtc-end-call", { + userId: socket.user.id, + userName: socket.user.fullName, + }) + } + }) + + // User yêu cầu call lại (trường hợp reconnect) + socket.on("webrtc-reconnect-request", (data) => { + const { roomId } = data + if (roomId && activeRooms.has(roomId)) { + const roomParticipants = activeRooms.get(roomId) + const seen = new Set() + const participants = [] + for (const p of roomParticipants.values()) { + if (!seen.has(p.userId)) { + seen.add(p.userId) + participants.push(p) + } + } + // Gửi danh sách participants cho user đang reconnect + socket.emit("webrtc-participants-list", { participants }) + } + }) + + // ===================================== + // 🛑 Sự kiện: Admin kết thúc cuộc họp (đẩy tất cả thành viên ra) + // ===================================== + socket.on("end-meeting", async (data) => { + try { + const { roomId } = data + + // Chỉ admin mới có thể kết thúc cuộc họp + if (socket.user.role !== "admin") { + socket.emit("error", { message: "Chỉ admin mới có quyền kết thúc cuộc họp" }) + return + } + + if (!roomId || !activeRooms.has(roomId)) { + socket.emit("error", { message: "Phòng họp không tồn tại" }) + return + } + + const roomParticipants = activeRooms.get(roomId) + + // Cập nhật trạng thái meeting trong DB + const meeting = await Meeting.findOne({ roomId }) + if (meeting) { + meeting.status = "ended" + await meeting.save() + } + + // Gửi event "meeting-ended" đến tất cả thành viên trong phòng + io.to(roomId).emit("meeting-ended", { + message: "Cuộc họp đã được kết thúc bởi admin", + endedBy: { + id: socket.user.id, + name: socket.user.fullName, + }, + }) + + // Đẩy tất cả thành viên ra khỏi phòng + const participantSockets = await io.in(roomId).fetchSockets() + participantSockets.forEach((participantSocket) => { + participantSocket.leave(roomId) + // Force disconnect để đảm bảo client nhận được event + participantSocket.emit("meeting-ended", { + message: "Cuộc họp đã được kết thúc bởi admin", + endedBy: { + id: socket.user.id, + name: socket.user.fullName, + }, + }) + }) + + // Xóa phòng khỏi danh sách active + activeRooms.delete(roomId) + + console.log(`Meeting ${roomId} ended by admin ${socket.user.fullName}`) + } catch (error) { + console.error("Error ending meeting:", error) + socket.emit("error", { message: "Lỗi khi kết thúc cuộc họp" }) + } + }) + }) + + return io +} + +// Xuất ra để các module khác có thể truy cập danh sách phòng hoặc người dùng +export { activeRooms, userSocketMap } diff --git a/meeting-backend/test/data/05-versions-space.pdf b/meeting-backend/test/data/05-versions-space.pdf new file mode 100644 index 0000000..e69de29 diff --git a/meeting-backend/uploads/1762218354571-276475551.pdf b/meeting-backend/uploads/1762218354571-276475551.pdf new file mode 100644 index 0000000000000000000000000000000000000000..120fc79db104e983d83ae5a488dfdc787b24cc28 GIT binary patch literal 529820 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

T_+cyhIe=HI|ixq3cFqwd*l-!Oo(`u%KxG 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

8B(Rr_wgUj%C;SgM>uu>V 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 literal 0 HcmV?d00001 diff --git a/meeting-frontend/.dockerignore b/meeting-frontend/.dockerignore new file mode 100644 index 0000000..6fda890 --- /dev/null +++ b/meeting-frontend/.dockerignore @@ -0,0 +1,6 @@ +node_modules +build +npm-debug.log +.env +.git +.vscode diff --git a/meeting-frontend/.gitignore b/meeting-frontend/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/meeting-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/meeting-frontend/Dockerfile b/meeting-frontend/Dockerfile new file mode 100644 index 0000000..18dc62e --- /dev/null +++ b/meeting-frontend/Dockerfile @@ -0,0 +1,26 @@ +# =============================== +# Stage 1: Build React app +# =============================== +FROM node:18-alpine AS build + +WORKDIR /app +COPY package*.json ./ +RUN npm install + +# Copy source và build production +COPY . . +RUN npm run build + +# =============================== +# Stage 2: Dùng Nginx để serve frontend +# =============================== +FROM nginx:stable-alpine + +# Copy build từ stage 1 vào thư mục của nginx +COPY --from=build /app/build /usr/share/nginx/html + +# Expose port 80 (nginx default) +EXPOSE 80 + +# Chạy nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/meeting-frontend/package-lock.json b/meeting-frontend/package-lock.json new file mode 100644 index 0000000..7558d37 --- /dev/null +++ b/meeting-frontend/package-lock.json @@ -0,0 +1,17598 @@ +{ + "name": "meeting-app-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "meeting-app-frontend", + "version": "0.1.0", + "dependencies": { + "@react-oauth/google": "^0.12.0", + "axios": "^1.6.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.20.0", + "react-scripts": "5.0.1", + "socket.io-client": "^4.8.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.4.tgz", + "integrity": "sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==", + "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", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.22.10" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "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.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", + "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", + "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz", + "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "semver": "^6.3.1" + }, + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "license": "MIT" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==", + "license": "CC0-1.0" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "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", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "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.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "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.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "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", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "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", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "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", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "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.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "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", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "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.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "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", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "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", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "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", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "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", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "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", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "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", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "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", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "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", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "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", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "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", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "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", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "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", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "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.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "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", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.17.tgz", + "integrity": "sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ==", + "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/@react-oauth/google": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@react-oauth/google/-/google-0.12.2.tgz", + "integrity": "sha512-d1GVm2uD4E44EJft2RbKtp8Z1fp/gK8Lb6KHgs3pHlM0PxCXGLaq8LLYQYENnN4xPWO1gkL4apBtlPKzpLvZwg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", + "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "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", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "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", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "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", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "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", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.14.0.tgz", + "integrity": "sha512-WJFej426qe4RWOm9MMtP4V3CV4AucXolQty+GRgAWLgQXmpCuwzs7hEpxxhSc/znXUSxum9d/P/32MW0FlAAlA==", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "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", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "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/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "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.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "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.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "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.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", + "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", + "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", + "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "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", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "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", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "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", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "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", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "license": "BSD-3-Clause" + }, + "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/accepts/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/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "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", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "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", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "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", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "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/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "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==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "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", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "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", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "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", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "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", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "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", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", + "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", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "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", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "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", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "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", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "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.11.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "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", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "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", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "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", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "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", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "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", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "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", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.5" + }, + "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", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "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", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.1.0.tgz", + "integrity": "sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==", + "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", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "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", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz", + "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "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", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "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/body-parser/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/body-parser/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/body-parser/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/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "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", + "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/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "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.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "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", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "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", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "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/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/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/compression/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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "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/core-js": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz", + "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.26.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz", + "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "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", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "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", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "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", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "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", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "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", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "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", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "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", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "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", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "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", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "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", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "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", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "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", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "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", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "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", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "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.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "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", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "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", + "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/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "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", + "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/detect-port-alt/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/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "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", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "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", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "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", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "license": "BSD-2-Clause" + }, + "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/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "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/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "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.239", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.239.tgz", + "integrity": "sha512-1y5w0Zsq39MSPmEjHjbizvhYoTaulVtivpxkp5q5kaPmQtsK6/2nvAzGRxNMS9DoYySp9PkW0MAQDwU1m764mg==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "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/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "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/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "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.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "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-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "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.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "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", + "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/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "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", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "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", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "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.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "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", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "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", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "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.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "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.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "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", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "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", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "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", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "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", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "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", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "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", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "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", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "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", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "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/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "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", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "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", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "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", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "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", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "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", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "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", + "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/express/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/express/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/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "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", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "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", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "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", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "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/finalhandler/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/finalhandler/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/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "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", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "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", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "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", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "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", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "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", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "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", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "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", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" + }, + "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/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "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/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "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.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "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", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "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", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "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", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "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", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "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", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "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", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "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", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "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", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "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", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "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", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "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.4", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.4.tgz", + "integrity": "sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw==", + "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", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "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", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "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/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "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", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "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", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "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", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "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", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "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", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "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", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "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", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "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", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "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", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "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", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "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", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "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", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "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", + "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-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "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", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "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", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "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", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "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", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "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", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "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", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "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", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "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", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "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", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "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", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "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", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "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", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "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.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "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", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "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", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "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", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "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", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "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", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "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", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "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", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "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", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "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", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "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", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "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", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "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", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "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", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "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", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "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", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "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", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "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", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "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", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "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", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "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", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "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", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "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", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "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", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "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", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "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", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "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", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "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", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "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", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "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", + "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/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "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", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "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", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "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", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "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.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "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", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "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", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "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", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "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", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "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", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "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", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "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", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", + "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "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", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "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", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "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", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "license": "CC0-1.0" + }, + "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/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "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/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "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/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "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", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "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", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.22", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "license": "MIT" + }, + "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-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "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/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "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", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "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", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "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", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "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", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "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", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "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", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "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", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "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", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "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", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "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", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "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", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "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/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "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/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "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", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "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", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "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", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "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", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "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", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "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", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "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-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "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", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "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", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "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", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "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", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "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", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "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", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "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", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "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", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "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", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "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", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "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", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "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", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "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", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "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", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "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", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "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", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "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", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "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", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "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-addr/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/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/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "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/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "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/raw-body/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/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "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-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "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", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "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", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "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", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "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", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "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", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "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", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", + "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", + "license": "MIT" + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", + "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", + "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.0", + "react-router": "6.30.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "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", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "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", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "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", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "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.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "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", + "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/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "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", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "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", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "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", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "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", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "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", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "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", + "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/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "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", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "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", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "license": "CC0-1.0" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "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", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "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", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "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", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "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", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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/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/send/node_modules/debug/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/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/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "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", + "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/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "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", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/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/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "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", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "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", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "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", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "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", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "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", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "license": "MIT" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "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", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "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", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "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", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "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", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "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", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "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", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "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", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "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", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "license": "MIT" + }, + "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/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/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/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "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", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "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", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "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", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "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", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "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", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "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", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "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", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "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", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "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.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "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", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "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", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "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", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "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", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "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", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "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", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "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", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "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.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/tailwindcss/node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "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", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "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.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "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", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "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", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "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==", + "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/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "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", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "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", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "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", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "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", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "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", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "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", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "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", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "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.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "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/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "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", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "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/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "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", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "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/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "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", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.102.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz", + "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.26.3", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.3", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "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", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "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.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "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", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "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.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "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", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/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/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "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", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "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", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "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", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "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", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "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", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "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", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "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", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "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", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "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", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "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", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "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", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "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", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "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", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "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", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "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", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "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/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "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", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "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", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "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", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "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" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/meeting-frontend/package.json b/meeting-frontend/package.json new file mode 100644 index 0000000..18d725f --- /dev/null +++ b/meeting-frontend/package.json @@ -0,0 +1,27 @@ +{ + "name": "meeting-app-frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.20.0", + "axios": "^1.6.0", + "@react-oauth/google": "^0.12.0", + "react-scripts": "5.0.1", + "socket.io-client": "^4.8.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": ["react-app"] + }, + "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/meeting-frontend/public/index.html b/meeting-frontend/public/index.html new file mode 100644 index 0000000..77354d1 --- /dev/null +++ b/meeting-frontend/public/index.html @@ -0,0 +1,14 @@ + + + + + + + + Meeting App + + + +

+ + diff --git a/meeting-frontend/src/App.css b/meeting-frontend/src/App.css new file mode 100644 index 0000000..7ae2b6e --- /dev/null +++ b/meeting-frontend/src/App.css @@ -0,0 +1,4 @@ +.app { + min-height: 100vh; + background: radial-gradient(circle at top left, #e8f0fe, #f4f6fb 55%, #fdfdfd); +} diff --git a/meeting-frontend/src/App.js b/meeting-frontend/src/App.js new file mode 100644 index 0000000..1f68c45 --- /dev/null +++ b/meeting-frontend/src/App.js @@ -0,0 +1,54 @@ +import { BrowserRouter as Router, Routes, Route, Navigate } from "react-router-dom" +import { GoogleOAuthProvider } from "@react-oauth/google" +import { AuthProvider } from "./context/AuthContext" +import { ProtectedRoute } from "./components/ProtectedRoute" +import LoginPage from "./pages/LoginPage" +import RegisterPage from "./pages/RegisterPage" +import DashboardPage from "./pages/DashboardPage" +import AdminDashboardPage from "./pages/AdminDashboardPage" +import MeetingRoomPage from "./pages/MeetingRoomPage" +import "./App.css" + +function App() { + const googleClientId = process.env.REACT_APP_GOOGLE_CLIENT_ID || "YOUR_GOOGLE_CLIENT_ID" + + return ( + + + + + } /> + } /> + + + + } + /> + + + + } + /> + + + + } + /> + } /> + + + + + ) +} + +export default App diff --git a/meeting-frontend/src/api/auth.js b/meeting-frontend/src/api/auth.js new file mode 100644 index 0000000..22fd8c4 --- /dev/null +++ b/meeting-frontend/src/api/auth.js @@ -0,0 +1,60 @@ +import client from "./client" + +export const authAPI = { + register: (data) => client.post("/auth/register", data), + login: (data) => client.post("/auth/login", data), + googleCallback: (data) => client.post("/auth/google-callback", data), +} + +export const userAPI = { + getPendingUsers: () => client.get("/users/pending"), + getStats: () => client.get("/users/stats"), + approveUser: (id) => client.patch(`/users/approve/${id}`), + deleteUser: (id) => client.delete(`/users/${id}`), +} + +export const meetingAPI = { + createMeeting: (data) => client.post("/meetings", data), + getMeetings: () => client.get("/meetings"), + getMeetingById: (id) => client.get(`/meetings/${id}`), + getMeetingByRoomId: (roomId) => client.get(`/meetings/room/${roomId}`), + joinMeetingById: (id) => client.post(`/meetings/${id}/join`), + joinMeetingByRoomId: (roomId) => client.post(`/meetings/room/${roomId}/join`), +} + +export const documentAPI = { + uploadDocument: (formData) => { + // Axios sẽ tự động set Content-Type cho multipart/form-data + return client.post("/documents/upload", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }) + }, + getDocuments: (roomId) => client.get(`/documents/meeting/${roomId}`), + downloadDocument: (id) => { + const token = sessionStorage.getItem("token") || localStorage.getItem("token") + const API_URL = process.env.REACT_APP_API_URL || "https://bkmeeting.soict.io/api" + window.open(`${API_URL}/documents/download/${id}?token=${token}`, "_blank") + }, + deleteDocument: (id) => client.delete(`/documents/${id}`), + ragChat: (data) => client.post("/documents/rag/chat", data), +} + +export const minutesAPI = { + uploadRecording: (formData) => { + return client.post("/minutes/upload", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }) + }, + getMinutes: (roomId) => client.get(`/minutes/meeting/${roomId}`), + getMinuteById: (id) => client.get(`/minutes/${id}`), + getAudioUrl: (id) => { + const token = sessionStorage.getItem("token") || localStorage.getItem("token") + const API_URL = process.env.REACT_APP_API_URL || "https://bkmeeting.soict.io/api" + return `${API_URL}/minutes/${id}/audio?token=${token}` + }, + deleteMinute: (id) => client.delete(`/minutes/${id}`), +} diff --git a/meeting-frontend/src/api/client.js b/meeting-frontend/src/api/client.js new file mode 100644 index 0000000..3a1ed90 --- /dev/null +++ b/meeting-frontend/src/api/client.js @@ -0,0 +1,34 @@ +import axios from "axios" + +const API_URL = process.env.REACT_APP_API_URL || "https://bkmeeting.soict.io/api" + +const client = axios.create({ + baseURL: API_URL, + headers: { + "Content-Type": "application/json", + }, +}) + +// Add token to requests (prefer sessionStorage for per-tab isolation) +client.interceptors.request.use((config) => { + const token = sessionStorage.getItem("token") || localStorage.getItem("token") + if (token) { + config.headers.Authorization = `Bearer ${token}` + } + return config +}) + +// Handle responses +client.interceptors.response.use( + (response) => response, + (error) => { + if (error.response?.status === 401) { + localStorage.removeItem("token") + localStorage.removeItem("user") + window.location.href = "/login" + } + return Promise.reject(error) + }, +) + +export default client diff --git a/meeting-frontend/src/components/DocumentUpload.js b/meeting-frontend/src/components/DocumentUpload.js new file mode 100644 index 0000000..2de4037 --- /dev/null +++ b/meeting-frontend/src/components/DocumentUpload.js @@ -0,0 +1,123 @@ +import { useState } from "react" +import { documentAPI } from "../api/auth" +import "../styles/DocumentUpload.css" + +export default function DocumentUpload({ roomId, onUploadSuccess }) { + const [selectedFile, setSelectedFile] = useState(null) + const [uploading, setUploading] = useState(false) + const [error, setError] = useState(null) + const [success, setSuccess] = useState(null) + + const handleFileSelect = (e) => { + const file = e.target.files[0] + if (file) { + // Validate file type + const allowedTypes = [ + "application/pdf", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/msword", + "text/plain", + ] + + if (!allowedTypes.includes(file.type)) { + setError("Chỉ hỗ trợ file PDF, DOCX, DOC, TXT (tối đa 10MB)") + return + } + + // Validate file size (10MB) + if (file.size > 10 * 1024 * 1024) { + setError("File quá lớn. Tối đa 10MB") + return + } + + setSelectedFile(file) + setError(null) + setSuccess(null) + } + } + + const handleUpload = async () => { + if (!selectedFile || !roomId) return + + setUploading(true) + setError(null) + setSuccess(null) + + try { + const formData = new FormData() + formData.append("document", selectedFile) + formData.append("roomId", roomId) + + const response = await documentAPI.uploadDocument(formData) + + setSuccess("Tài liệu đã được upload thành công. Đang xử lý...") + setSelectedFile(null) + + // Reset file input + const fileInput = document.getElementById("document-upload-input") + if (fileInput) fileInput.value = "" + + if (onUploadSuccess) { + onUploadSuccess(response.data) + } + } catch (err) { + setError(err.response?.data?.message || "Lỗi khi upload tài liệu") + } finally { + setUploading(false) + } + } + + const formatFileSize = (bytes) => { + if (bytes < 1024) return bytes + " B" + if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + " KB" + return (bytes / (1024 * 1024)).toFixed(2) + " MB" + } + + return ( +
+
+

📄 Upload Tài liệu

+

Hỗ trợ: PDF, DOCX, DOC, TXT (tối đa 10MB)

+
+ +
+ + +
+ + {selectedFile && ( + + )} + + {error &&
{error}
} + {success &&
{success}
} +
+ ) +} diff --git a/meeting-frontend/src/components/Navbar.js b/meeting-frontend/src/components/Navbar.js new file mode 100644 index 0000000..1f2867e --- /dev/null +++ b/meeting-frontend/src/components/Navbar.js @@ -0,0 +1,86 @@ +"use client" + +import { useNavigate, useLocation } from "react-router-dom" +import { useAuth } from "../hooks/useAuth" +import "../styles/Navbar.css" + +export default function Navbar() { + const navigate = useNavigate() + const location = useLocation() + const { user, logout } = useAuth() + + const handleLogout = () => { + logout() + navigate("/login") + } + + const handleAdminClick = () => { + navigate("/admin") + } + + const handleDashboardClick = () => { + navigate("/dashboard") + } + + const isAdminPage = location.pathname === "/admin" + const isDashboardPage = location.pathname === "/dashboard" + + const getInitials = () => { + const source = user?.fullName || user?.email || "" + if (!source) return "ME" + const parts = source.trim().split(" ").filter(Boolean) + if (parts.length === 0) return source.slice(0, 2).toUpperCase() + const initials = parts.map((part) => part[0]).join("") + return initials.slice(0, 2).toUpperCase() + } + + return ( + + ) +} diff --git a/meeting-frontend/src/components/ProtectedRoute.js b/meeting-frontend/src/components/ProtectedRoute.js new file mode 100644 index 0000000..e1e2739 --- /dev/null +++ b/meeting-frontend/src/components/ProtectedRoute.js @@ -0,0 +1,21 @@ +"use client" +import { Navigate } from "react-router-dom" +import { useAuth } from "../hooks/useAuth" + +export const ProtectedRoute = ({ children, requiredRole = null }) => { + const { user, loading } = useAuth() + + if (loading) { + return
Loading...
+ } + + if (!user) { + return + } + + if (requiredRole && user.role !== requiredRole) { + return + } + + return children +} diff --git a/meeting-frontend/src/components/RAGChatbox.js b/meeting-frontend/src/components/RAGChatbox.js new file mode 100644 index 0000000..4c41dda --- /dev/null +++ b/meeting-frontend/src/components/RAGChatbox.js @@ -0,0 +1,135 @@ +import { useState, useRef, useEffect } from "react" +import { documentAPI } from "../api/auth" +import "../styles/RAGChatbox.css" + +export default function RAGChatbox({ roomId }) { + const [messages, setMessages] = useState([ + { + role: "assistant", + content: "Xin chào! Tôi là trợ lý AI. Bạn có thể hỏi tôi về nội dung trong các tài liệu đã được upload trong cuộc họp này.", + timestamp: new Date(), + }, + ]) + const [input, setInput] = useState("") + const [loading, setLoading] = useState(false) + const messagesEndRef = useRef(null) + + useEffect(() => { + scrollToBottom() + }, [messages]) + + const scrollToBottom = () => { + messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }) + } + + const handleSend = async (e) => { + e.preventDefault() + if (!input.trim() || loading) return + + const userMessage = { + role: "user", + content: input.trim(), + timestamp: new Date(), + } + + setMessages((prev) => [...prev, userMessage]) + setInput("") + setLoading(true) + + try { + const response = await documentAPI.ragChat({ + roomId: roomId, + query: input.trim(), + }) + + const assistantMessage = { + role: "assistant", + content: response.data.answer, + sources: response.data.sources || [], + confidence: response.data.confidence, + timestamp: new Date(), + } + + setMessages((prev) => [...prev, assistantMessage]) + } catch (error) { + const errorMessage = { + role: "assistant", + content: error.response?.data?.answer || "Xin lỗi, có lỗi xảy ra khi xử lý câu hỏi của bạn.", + error: true, + timestamp: new Date(), + } + setMessages((prev) => [...prev, errorMessage]) + } finally { + setLoading(false) + } + } + + const formatTime = (timestamp) => { + return new Date(timestamp).toLocaleTimeString("vi-VN", { + hour: "2-digit", + minute: "2-digit", + }) + } + + return ( +
+
+

🤖 AI Trợ lý

+

Hỏi về nội dung tài liệu đã upload

+
+ +
+ {messages.map((msg, index) => ( +
+
+
{msg.content}
+ {msg.sources && msg.sources.length > 0 && ( +
+
📚 Nguồn tham khảo:
+ {msg.sources.map((source, idx) => ( +
+ {source.fileName} + {source.text} + {source.similarity && ( + + Độ liên quan: {(source.similarity * 100).toFixed(1)}% + + )} +
+ ))} +
+ )} +
{formatTime(msg.timestamp)}
+
+
+ ))} + {loading && ( +
+
+
+ + + +
+
+
+ )} +
+
+ +
+ setInput(e.target.value)} + placeholder="Nhập câu hỏi về tài liệu..." + className="chatbox-input" + disabled={loading} + /> + +
+
+ ) +} diff --git a/meeting-frontend/src/components/VideoCall.js b/meeting-frontend/src/components/VideoCall.js new file mode 100644 index 0000000..7a18345 --- /dev/null +++ b/meeting-frontend/src/components/VideoCall.js @@ -0,0 +1,1934 @@ +import { useEffect, useRef, useState, useMemo, memo } from "react" + +export default function VideoCall({ + participants, + socketRef, + roomId, + user, + onToggleMedia, + isAudioEnabled: externalIsAudioEnabled, + isVideoEnabled: externalIsVideoEnabled, + onToggleAudio, + onToggleVideo, + onLeaveMeeting, + onRecordingUploaded +}) { + const [localStream, setLocalStream] = useState(null) + const [remoteStreams, setRemoteStreams] = useState(new Map()) // userId -> MediaStream + const [isVideoEnabled, setIsVideoEnabled] = useState(externalIsVideoEnabled !== undefined ? externalIsVideoEnabled : true) + const [isAudioEnabled, setIsAudioEnabled] = useState(externalIsAudioEnabled !== undefined ? externalIsAudioEnabled : true) + const [isScreenSharing, setIsScreenSharing] = useState(false) + // const [activeSpeakers, setActiveSpeakers] = useState(new Set()) + + const localVideoRef = useRef(null) + const peerConnectionsRef = useRef(new Map()) // userId -> RTCPeerConnection + const screenStreamRef = useRef(null) + const [showPeoplePanel, setShowPeoplePanel] = useState(false) + const [startTime] = useState(Date.now()) + const [elapsed, setElapsed] = useState("00:00") + + // Recording state + const [isRecording, setIsRecording] = useState(false) + const [recordingTime, setRecordingTime] = useState(0) + const mediaRecorderRef = useRef(null) + const recordingStartTimeRef = useRef(null) + const recordingIntervalRef = useRef(null) + const recordedChunksRef = useRef([]) + const recordingAudioContextRef = useRef(null) + const recordingDestinationRef = useRef(null) + const recordingStreamRef = useRef(null) // For video+audio recording + const audioRecorderRef = useRef(null) // Separate audio recorder + const audioChunksRef = useRef([]) // Audio chunks for WAV conversion + const pendingRecordingRef = useRef(null) // Store pending recording data (audio blob, duration, times) + + // Khởi tạo local media stream + useEffect(() => { + initializeLocalMedia() + const timer = setInterval(() => { + const secs = Math.floor((Date.now() - startTime) / 1000) + const mm = String(Math.floor(secs / 60)).padStart(2, "0") + const ss = String(secs % 60).padStart(2, "0") + setElapsed(`${mm}:${ss}`) + }, 1000) + return () => { + // Cleanup + try { localStream?.getTracks().forEach((t) => t.stop()) } catch {} + if (screenStreamRef.current) { + screenStreamRef.current.getTracks().forEach((track) => track.stop()) + } + // Close and clear all peer connections to avoid reusing closed PCs on remount + try { + peerConnectionsRef.current.forEach((pc) => { + try { pc.close() } catch {} + }) + peerConnectionsRef.current.clear() + } catch {} + clearInterval(timer) + } + }, [startTime]) // eslint-disable-line react-hooks/exhaustive-deps + + // Monitor local video track changes (e.g., when device rotates and browser reinitializes camera) + + + // Xử lý WebRTC events khi có participants mới + useEffect(() => { + if (!socketRef.current) return + + const socket = socketRef.current + + // Media toggle events + const handleMediaToggle = (data) => { + console.log("Media toggle:", data) + // Update remote user media state in UI + // This will be handled by the parent component + } + + // WebRTC Offer received + const handleOffer = async (data) => { + const { fromUserId, offer } = data + console.log(`[VideoCall] Received offer from: ${fromUserId}`) + + // CRITICAL FIX #1: Ensure localStream is ready before processing offer + if (!localStream) { + console.warn(`[VideoCall] Local stream not ready when receiving offer from ${fromUserId}, initializing now...`) + try { + await initializeLocalMedia() + // Wait a bit for stream to be set + await new Promise(resolve => setTimeout(resolve, 100)) + } catch (err) { + console.error(`[VideoCall] Failed to initialize local media when receiving offer:`, err) + // Continue anyway, might still work if stream becomes available + } + } + + const pc = await getOrCreatePeerConnection(fromUserId) + + // CRITICAL: Ensure local tracks are added before creating answer + // If localStream wasn't ready when PC was created, add tracks now + const senders = pc.getSenders() + const hasVideoTrack = senders.some(s => s.track && s.track.kind === "video") + const hasAudioTrack = senders.some(s => s.track && s.track.kind === "audio") + + console.log(`[VideoCall] Before creating answer for ${fromUserId}: hasVideo=${hasVideoTrack}, hasAudio=${hasAudioTrack}, hasLocalStream=${!!localStream}, senders=${senders.length}`) + + if (localStream && (!hasVideoTrack || !hasAudioTrack)) { + console.log(`[VideoCall] Adding missing tracks to PC for ${fromUserId} before creating answer`) + // Add video tracks if missing + if (!hasVideoTrack) { + const videoTracks = localStream.getVideoTracks() + console.log(`[VideoCall] Adding ${videoTracks.length} video track(s) to PC for ${fromUserId}`) + videoTracks.forEach((track) => { + if (pc.signalingState !== "closed") { + try { + const sender = pc.addTrack(track, localStream) + console.log(`[VideoCall] Added video track to PC for ${fromUserId} before answer, trackId: ${track.id}`) + const params = sender.getParameters() + params.degradationPreference = "maintain-framerate" + if (!params.encodings || params.encodings.length === 0) { + params.encodings = [{ maxBitrate: 600000 }] + } + sender.setParameters(params) + } catch (err) { + console.error(`[VideoCall] Error adding video track before answer:`, err) + } + } + }) + } + + // Add audio tracks if missing + if (!hasAudioTrack) { + const audioTrack = localStream.getAudioTracks()[0] + if (audioTrack && pc.signalingState !== "closed") { + try { + audioTrack.enabled = isAudioEnabled + pc.addTrack(audioTrack, localStream) + } catch (err) { + console.error(`[VideoCall] Error adding audio track before answer:`, err) + } + } + } + } else if (!localStream) { + console.error(`[VideoCall] CRITICAL: Cannot create answer for ${fromUserId} - localStream is still null!`) + } + + try { + const offerDesc = new RTCSessionDescription(offer) + + // Check if offer contains media (tracks) + const hasAudio = offer.sdp?.includes('m=audio') || false + const hasVideo = offer.sdp?.includes('m=video') || false + console.log(`[VideoCall] Offer from ${fromUserId} contains:`, { + hasAudio, + hasVideo, + sdpPreview: offer.sdp?.substring(0, 200) + }) + + const isStabilized = pc.signalingState === "stable" + if (!isStabilized) { + // Glare: rollback local description before applying remote offer + try { + await pc.setLocalDescription({ type: "rollback" }) + } catch {} + } + + await pc.setRemoteDescription(offerDesc) + console.log(`[VideoCall] Remote description set for ${fromUserId}`) + + // Verify tracks are still there before creating answer + const finalSenders = pc.getSenders() + const finalHasVideo = finalSenders.some(s => s.track && s.track.kind === "video") + const finalHasAudio = finalSenders.some(s => s.track && s.track.kind === "audio") + console.log(`[VideoCall] Before createAnswer for ${fromUserId}: hasVideo=${finalHasVideo}, hasAudio=${finalHasAudio}, senders=${finalSenders.length}`) + + const answer = await pc.createAnswer() + await pc.setLocalDescription(answer) + + // Check if answer contains media + const answerHasAudio = answer.sdp?.includes('m=audio') || false + const answerHasVideo = answer.sdp?.includes('m=video') || false + console.log(`[VideoCall] Answer created for ${fromUserId}:`, { + hasAudio: answerHasAudio, + hasVideo: answerHasVideo, + sdpPreview: answer.sdp?.substring(0, 200) + }) + + socket.emit("webrtc-answer", { + roomId, + targetUserId: fromUserId, + answer: pc.localDescription, + }) + console.log(`[VideoCall] Answer sent to ${fromUserId}`) + + // Check connection state after sending answer + setTimeout(() => { + console.log(`[VideoCall] Connection state after sending answer for ${fromUserId}:`, { + connectionState: pc.connectionState, + iceConnectionState: pc.iceConnectionState, + iceGatheringState: pc.iceGatheringState, + signalingState: pc.signalingState, + senders: pc.getSenders().length, + receivers: pc.getReceivers().length + }) + }, 1000) + } catch (err) { + console.error(`[VideoCall] Error handling offer from ${fromUserId}:`, err) + } + } + + // WebRTC Answer received + const handleAnswer = async (data) => { + const { fromUserId, answer } = data + console.log(`[VideoCall] Received answer from: ${fromUserId}`) + + const pc = peerConnectionsRef.current.get(fromUserId) + if (pc) { + try { + const answerDesc = new RTCSessionDescription(answer) + + // Check if answer contains media (tracks) + const hasAudio = answer.sdp?.includes('m=audio') || false + const hasVideo = answer.sdp?.includes('m=video') || false + console.log(`[VideoCall] Answer from ${fromUserId} contains:`, { + hasAudio, + hasVideo, + sdpPreview: answer.sdp?.substring(0, 200) + }) + + await pc.setRemoteDescription(answerDesc) + console.log(`[VideoCall] Remote description set for ${fromUserId}`) + + // Check connection state and receivers after setting answer + setTimeout(() => { + const receivers = pc.getReceivers() + console.log(`[VideoCall] Connection state after answer for ${fromUserId}:`, { + connectionState: pc.connectionState, + iceConnectionState: pc.iceConnectionState, + iceGatheringState: pc.iceGatheringState, + signalingState: pc.signalingState, + receiversCount: receivers.length, + receivers: receivers.map(r => ({ + kind: r.track?.kind, + trackId: r.track?.id, + trackReadyState: r.track?.readyState, + trackMuted: r.track?.muted, + trackEnabled: r.track?.enabled + })) + }) + + // If we have receivers but no ontrack event fired, something is wrong + if (receivers.length > 0) { + console.log(`[VideoCall] WARNING: Have ${receivers.length} receiver(s) but ontrack may not have fired yet`) + } + }, 1000) + } catch (err) { + console.error(`[VideoCall] Error setting remote answer for ${fromUserId}:`, err) + } + } else { + console.error(`[VideoCall] No peer connection found for ${fromUserId} when receiving answer`) + } + } + + // ICE Candidate received + const handleIceCandidate = async (data) => { + const { fromUserId, candidate } = data + console.log("Received ICE candidate from:", fromUserId) + + const pc = peerConnectionsRef.current.get(fromUserId) + if (pc && candidate) { + await pc.addIceCandidate(new RTCIceCandidate(candidate)) + } + } + + // End call event + const handleEndCall = (data) => { + const { userId } = data + console.log("End call from:", userId) + removePeerConnection(userId) + } + + socket.on("media-toggle", handleMediaToggle) + socket.on("webrtc-offer", handleOffer) + socket.on("webrtc-answer", handleAnswer) + socket.on("webrtc-ice-candidate", handleIceCandidate) + socket.on("webrtc-end-call", handleEndCall) + + return () => { + socket.off("media-toggle", handleMediaToggle) + socket.off("webrtc-offer", handleOffer) + socket.off("webrtc-answer", handleAnswer) + socket.off("webrtc-ice-candidate", handleIceCandidate) + socket.off("webrtc-end-call", handleEndCall) + } + }, [socketRef, roomId]) // eslint-disable-line react-hooks/exhaustive-deps + + // Initialize local video/audio - Simplified but with basic audio constraints + const initializeLocalMedia = async () => { + try { + // Simple, fast configuration with built-in browser processing for audio + const stream = await navigator.mediaDevices.getUserMedia({ + video: true, + audio: { + echoCancellation: true, + noiseSuppression: true, + autoGainControl: true + } + }) + + setLocalStream(stream) + + if (localVideoRef.current) { + localVideoRef.current.srcObject = stream + } + + console.log("Local media initialized") + } catch (error) { + console.error("Error accessing media devices:", error) + alert("Không thể truy cập camera/microphone") + } + } + + // Create or get peer connection + const getOrCreatePeerConnection = async (userId) => { + const existing = peerConnectionsRef.current.get(userId) + if (existing) { + if (existing.signalingState !== "closed") return existing + // remove closed instance + peerConnectionsRef.current.delete(userId) + } + + const pc = new RTCPeerConnection({ + iceServers: [ + { urls: "stun:stun.l.google.com:19302" }, + { urls: "stun:stun1.l.google.com:19302" }, + ], + }) + + // Add local tracks - Simplified version + if (localStream) { + const videoTrack = localStream.getVideoTracks()[0] + const audioTrack = localStream.getAudioTracks()[0] + + if (videoTrack && pc.signalingState !== "closed") { + try { + pc.addTrack(videoTrack, localStream) + } catch (err) { + console.error(`Error adding video track for ${userId}:`, err) + } + } + + if (audioTrack && pc.signalingState !== "closed") { + try { + audioTrack.enabled = isAudioEnabled + pc.addTrack(audioTrack, localStream) + } catch (err) { + console.error(`Error adding audio track for ${userId}:`, err) + } + } + } + + // Avoid relying on onnegotiationneeded to prevent renegotiation loops causing flicker + + // Handle remote stream + pc.ontrack = (event) => { + const track = event.track + const [remoteStream] = event.streams + + console.log(`[VideoCall] ========== ONTRACK EVENT RECEIVED ==========`) + console.log(`[VideoCall] ontrack event from ${userId}:`, { + kind: track.kind, + id: track.id, + readyState: track.readyState, + muted: track.muted, + enabled: track.enabled, + hasStream: !!remoteStream, + streamId: remoteStream?.id, + eventStreams: event.streams.length, + receiver: event.receiver?.track?.kind + }) + console.log(`[VideoCall] =============================================`) + + // CRITICAL FIX: Get or create stream, and merge tracks properly + // Only create new stream reference when tracks actually change to prevent flickering + setRemoteStreams((prev) => { + let existingStream = prev.get(userId) + let needsUpdate = false + + if (!existingStream) { + // No existing stream, create new one (only first time) + if (!remoteStream) { + console.log(`[VideoCall] Creating new stream for ${userId} with track ${track.id}`) + existingStream = new MediaStream([track]) + } else { + console.log(`[VideoCall] Using remoteStream from event for ${userId}`) + existingStream = remoteStream + } + needsUpdate = true + } else { + // Existing stream found - check if this track is new or different + const existingTracksOfKind = existingStream.getTracks().filter(t => t.kind === track.kind) + const isNewTrack = !existingTracksOfKind.some(t => t.id === track.id) + + if (isNewTrack) { + // This is a new track, need to merge it + console.log(`[VideoCall] New ${track.kind} track ${track.id} received for ${userId}, merging into existing stream`) + + // If we already have a track of this kind, replace it + if (existingTracksOfKind.length > 0) { + existingTracksOfKind.forEach(t => existingStream.removeTrack(t)) + console.log(`[VideoCall] Removed ${existingTracksOfKind.length} old ${track.kind} track(s) from stream for ${userId}`) + } + + // Add new track to existing stream + existingStream.addTrack(track) + console.log(`[VideoCall] Added ${track.kind} track ${track.id} to existing stream for ${userId}`) + needsUpdate = true + } else { + // Track already exists, no need to update + console.log(`[VideoCall] Track ${track.id} (${track.kind}) already exists in stream for ${userId}, skipping update`) + return prev + } + } + + if (!needsUpdate) { + return prev + } + + // Log final stream state + const finalVideoTracks = existingStream.getVideoTracks() + const finalAudioTracks = existingStream.getAudioTracks() + console.log(`[VideoCall] Final stream for ${userId}:`, { + streamId: existingStream.id, + active: existingStream.active, + videoTracks: finalVideoTracks.length, + audioTracks: finalAudioTracks.length, + videoTrackStates: finalVideoTracks.map(t => ({ id: t.id, readyState: t.readyState, muted: t.muted, enabled: t.enabled })), + audioTrackStates: finalAudioTracks.map(t => ({ id: t.id, readyState: t.readyState, muted: t.muted, enabled: t.enabled })) + }) + + // Always update state to ensure React re-renders and video element updates + const copy = new Map(prev) + copy.set(userId, existingStream) + console.log(`[VideoCall] Updated stream for ${userId} in state`) + return copy + }) + + // Also listen for track events to update state + // Note: We don't need to update stream reference here as the track events + // will be handled by the RemoteVideo component's useEffect listeners + track.onunmute = () => { + console.log(`[VideoCall] Remote track unmuted from ${userId}, kind: ${track.kind}`) + // Don't update stream reference here to prevent flickering + // The RemoteVideo component will handle track state changes via its own listeners + } + + // Handle track ended + track.onended = () => { + console.log(`[VideoCall] Remote track ended from ${userId}, kind: ${track.kind}`) + if (track.kind === "video") { + // Don't remove stream immediately, wait a bit in case it reconnects + setTimeout(() => { + setRemoteStreams((prev) => { + const copy = new Map(prev) + const stream = copy.get(userId) + if (stream) { + const videoTracks = stream.getVideoTracks() + // Only remove if no live video tracks remain + if (videoTracks.length === 0 || videoTracks.every(t => t.readyState === "ended")) { + copy.delete(userId) + } + } + return copy + }) + }, 2000) + } + } + } + + pc.onremovetrack = (event) => { + const senderUserId = userId + setRemoteStreams((prev) => { + const copy = new Map(prev) + copy.delete(senderUserId) + return copy + }) + } + + // Handle ICE candidates + pc.onicecandidate = (event) => { + if (event.candidate && socketRef.current) { + socketRef.current.emit("webrtc-ice-candidate", { + roomId, + targetUserId: userId, + candidate: event.candidate, + }) + } + } + + // Handle connection state + pc.onconnectionstatechange = () => { + console.log(`Connection state with ${userId}:`, pc.connectionState) + if (pc.connectionState === "failed" || pc.connectionState === "disconnected") { + console.error(`WebRTC connection ${pc.connectionState} with ${userId}. ICE connection state:`, pc.iceConnectionState) + // 尝试自动重连:优先 restartIce,其次重新发起 offer + try { + if (typeof pc.restartIce === "function") { + console.log(`Restarting ICE with ${userId}`) + pc.restartIce() + } + } catch (err) { + console.warn(`restartIce error with ${userId}:`, err) + } + // 仅由“发起方”重新发起 offer,避免信令冲突 + const selfId = user?.id || "" + const remoteId = userId || "" + if (selfId && remoteId && selfId < remoteId) { + console.log(`Re-negotiating with ${userId} after state=${pc.connectionState}`) + createOfferForUser(userId) + } + } + } + + // Handle ICE connection state for better debugging + pc.oniceconnectionstatechange = () => { + console.log(`ICE connection state with ${userId}:`, pc.iceConnectionState) + if (pc.iceConnectionState === "failed") { + console.error(`ICE connection failed with ${userId}. This may indicate NAT/firewall issues.`) + } + } + + // Log ICE gathering state + pc.onicegatheringstatechange = () => { + console.log(`ICE gathering state with ${userId}:`, pc.iceGatheringState) + } + + peerConnectionsRef.current.set(userId, pc) + return pc + } + + // Create and send offer to user + const createOfferForUser = async (userId) => { + try { + // CRITICAL FIX #1: Ensure localStream is ready before creating offer + if (!localStream) { + console.warn(`[VideoCall] Cannot create offer for ${userId}: localStream not ready yet, waiting...`) + // Wait a bit and retry + setTimeout(() => { + if (localStream) { + console.log(`[VideoCall] Retrying offer creation for ${userId} after localStream ready`) + createOfferForUser(userId) + } + }, 500) + return + } + + const pc = await getOrCreatePeerConnection(userId) + // Deterministic initiator to avoid glare: only the lexicographically smaller userId makes offers + if ((user?.id || "") > userId) { + console.log(`[VideoCall] Skipping offer creation for ${userId} (not initiator)`) + return + } + if (pc.signalingState !== "stable") { + console.log(`[VideoCall] Skipping offer creation for ${userId} (signaling state: ${pc.signalingState})`) + return + } + + // Check if we have local tracks before creating offer + const senders = pc.getSenders() + const hasVideoTrack = senders.some(s => s.track && s.track.kind === "video") + const hasAudioTrack = senders.some(s => s.track && s.track.kind === "audio") + console.log(`[VideoCall] Creating offer for ${userId}. Has video: ${hasVideoTrack}, Has audio: ${hasAudioTrack}, LocalStream: ${!!localStream}, senders: ${senders.length}`) + + if (!hasVideoTrack && localStream) { + console.warn(`[VideoCall] No video track in PC for ${userId}, adding now...`) + const videoTracks = localStream.getVideoTracks() + videoTracks.forEach((track) => { + if (pc.signalingState !== "closed") { + try { + const sender = pc.addTrack(track, localStream) + console.log(`[VideoCall] Added video track to PC for ${userId} before offer`) + const params = sender.getParameters() + params.degradationPreference = "maintain-framerate" + if (!params.encodings || params.encodings.length === 0) { + params.encodings = [{ maxBitrate: 600000 }] + } + sender.setParameters(params) + } catch (err) { + console.error(`[VideoCall] Error adding video track before offer:`, err) + } + } + }) + } + + if (!hasAudioTrack && localStream) { + const audioTrack = localStream.getAudioTracks()[0] + if (audioTrack && pc.signalingState !== "closed") { + try { + audioTrack.enabled = isAudioEnabled + pc.addTrack(audioTrack, localStream) + } catch (err) { + console.error(`[VideoCall] Error adding audio track before offer:`, err) + } + } + } + + const finalSenders = pc.getSenders() + const finalHasVideo = finalSenders.some(s => s.track && s.track.kind === "video") + const finalHasAudio = finalSenders.some(s => s.track && s.track.kind === "audio") + + if (!finalHasVideo) { + console.error(`[VideoCall] CRITICAL: Still no video track after adding! Cannot create offer for ${userId}`) + return + } + + const offer = await pc.createOffer() + await pc.setLocalDescription(offer) + console.log(`[VideoCall] Offer created and set for ${userId}, hasVideo: ${finalHasVideo}, hasAudio: ${finalHasAudio}`) + + if (socketRef.current) { + socketRef.current.emit("webrtc-offer", { + roomId, + targetUserId: userId, + offer: pc.localDescription, + }) + console.log(`[VideoCall] Offer sent via socket to ${userId}`) + } else { + console.error(`[VideoCall] CRITICAL: socketRef.current is null! Cannot send offer to ${userId}`) + } + } catch (error) { + console.error(`[VideoCall] Error creating offer for ${userId}:`, error) + } + } + + // When local stream becomes available later, add tracks to existing PCs and renegotiate + useEffect(() => { + if (!localStream) { + console.log("Local stream not ready yet, waiting...") + return + } + console.log("Local stream ready, adding tracks to existing peer connections") + peerConnectionsRef.current.forEach((pc, remoteUserId) => { + if (pc.signalingState === "closed") { + try { peerConnectionsRef.current.delete(remoteUserId) } catch {} + return + } + const sendersKinds = pc.getSenders().map((s) => s.track?.kind) + console.log(`Checking tracks for ${remoteUserId}. Existing senders:`, sendersKinds) + + // Add video tracks + const videoTracks = localStream.getVideoTracks() + videoTracks.forEach((track) => { + if (!sendersKinds.includes("video")) { + try { + if (pc.signalingState !== "closed") { + pc.addTrack(track, localStream) + console.log(`Added video track to existing PC for ${remoteUserId}`) + } + } catch (err) { + console.error(`Error adding video track to existing PC for ${remoteUserId}:`, err) + } + } + }) + + // Add audio tracks + if (!sendersKinds.includes("audio")) { + const audioTrack = localStream.getAudioTracks()[0] + if (audioTrack && pc.signalingState !== "closed") { + try { + audioTrack.enabled = isAudioEnabled + pc.addTrack(audioTrack, localStream) + } catch (err) { + console.error(`Error adding audio track to existing PC for ${remoteUserId}:`, err) + } + } + } + + // Fire negotiation for initiator + if ((user?.id || "") < (remoteUserId || "")) { + console.log(`Triggering renegotiation for ${remoteUserId} after adding tracks`) + createOfferForUser(remoteUserId) + } + }) + }, [localStream]) // eslint-disable-line react-hooks/exhaustive-deps + + // Remove peer connection + const removePeerConnection = (userId) => { + const pc = peerConnectionsRef.current.get(userId) + if (pc) { + pc.close() + peerConnectionsRef.current.delete(userId) + } + setRemoteStreams((prev) => { + const newMap = new Map(prev) + newMap.delete(userId) + return newMap + }) + } + + // Toggle video + const toggleVideo = () => { + const next = !isVideoEnabled + setIsVideoEnabled(next) + const videoTrack = localStream?.getVideoTracks?.()[0] + if (videoTrack) videoTrack.enabled = next + + // Update all peer connections + peerConnectionsRef.current.forEach((pc) => { + if (pc.signalingState === "closed") return + const sender = pc.getSenders().find((s) => s.track && s.track.kind === "video") + if (sender && videoTrack) { + try { + sender.replaceTrack(next ? videoTrack : null) + } catch (err) { + console.error(`Error updating video track:`, err) + } + } + }) + + notifyMediaToggle("video", next) + } + + // Toggle audio - Simplified version + const toggleAudio = () => { + const next = !isAudioEnabled + setIsAudioEnabled(next) + + const audioTrack = localStream?.getAudioTracks?.()[0] + if (audioTrack) { + audioTrack.enabled = next + } + + // Update all peer connections without replacing the track (avoid renegotiation) + peerConnectionsRef.current.forEach((pc) => { + if (pc.signalingState === "closed") return + const sender = pc.getSenders().find((s) => s.track && s.track.kind === "audio") + if (sender) { + try { + if (sender.track) { + sender.track.enabled = next + } else if (audioTrack && next) { + // Edge case: sender lost track; re-add the original track + pc.addTrack(audioTrack, localStream) + } + } catch (err) { + console.error(`Error updating audio track:`, err) + } + } + }) + + notifyMediaToggle("audio", next) + } + + // Toggle screen share + const toggleScreenShare = async () => { + try { + if (!isScreenSharing) { + // Start screen sharing + const screenStream = await navigator.mediaDevices.getDisplayMedia({ + video: true, + audio: true, + }) + + // Replace video track in all peer connections + const videoTrack = screenStream.getVideoTracks()[0] + const audioShare = screenStream.getAudioTracks()[0] + peerConnectionsRef.current.forEach((pc) => { + const sender = pc.getSenders().find((s) => s.track?.kind === "video") + if (sender) { + sender.replaceTrack(videoTrack) + } + // nếu có audio từ share, đẩy lên (ghi đè mute của mic) + if (audioShare) { + const audioSender = pc.getSenders().find((s) => s.track?.kind === "audio") + if (audioSender) { + try { audioSender.replaceTrack(audioShare) } catch {} + } + } + }) + + // Update local video + if (localVideoRef.current) { + localVideoRef.current.srcObject = screenStream + } + + screenStreamRef.current = screenStream + setIsScreenSharing(true) + notifyMediaToggle("screen", true) + + // Handle screen share end + videoTrack.onended = () => { + toggleScreenShare() + } + } else { + // Stop screen sharing + if (screenStreamRef.current) { + const videoTrack = localStream?.getVideoTracks()[0] + const micTrack = localStream?.getAudioTracks?.()[0] + if (videoTrack) { + // Replace back to camera + peerConnectionsRef.current.forEach((pc) => { + const sender = pc.getSenders().find((s) => s.track?.kind === "video") + if (sender) { + sender.replaceTrack(videoTrack) + } + // khôi phục audio mic nếu đang bật + const audioSender = pc.getSenders().find((s) => s.track?.kind === "audio") + if (audioSender && micTrack) { + try { + micTrack.enabled = isAudioEnabled + audioSender.replaceTrack(isAudioEnabled ? micTrack : null) + } catch {} + } + }) + + if (localVideoRef.current) { + localVideoRef.current.srcObject = localStream + } + + screenStreamRef.current.getTracks().forEach((track) => track.stop()) + screenStreamRef.current = null + setIsScreenSharing(false) + notifyMediaToggle("screen", false) + } + } + } + } catch (error) { + console.error("Error toggling screen share:", error) + alert("Không thể chia sẻ màn hình") + } + } + + // Notify other users about media toggle + const notifyMediaToggle = (mediaType, enabled) => { + if (socketRef.current) { + socketRef.current.emit("media-toggle", { + roomId, + mediaType, + enabled, + }) + } + } + + // Convert audio buffer to WAV format + const audioBufferToWav = (buffer, sampleRate) => { + const length = buffer.length + const arrayBuffer = new ArrayBuffer(44 + length * 2) + const view = new DataView(arrayBuffer) + const samples = new Float32Array(buffer) + let offset = 0 + + // WAV header + const writeString = (str) => { + for (let i = 0; i < str.length; i++) { + view.setUint8(offset + i, str.charCodeAt(i)) + } + offset += str.length + } + + writeString('RIFF') + view.setUint32(offset, 36 + length * 2, true) + offset += 4 + writeString('WAVE') + writeString('fmt ') + view.setUint32(offset, 16, true) + offset += 4 + view.setUint16(offset, 1, true) // PCM format + offset += 2 + view.setUint16(offset, 1, true) // Mono + offset += 2 + view.setUint32(offset, sampleRate, true) + offset += 4 + view.setUint32(offset, sampleRate * 2, true) + offset += 4 + view.setUint16(offset, 2, true) + offset += 2 + view.setUint16(offset, 16, true) + offset += 2 + writeString('data') + view.setUint32(offset, length * 2, true) + offset += 4 + + // Convert float samples to 16-bit PCM + for (let i = 0; i < length; i++) { + const s = Math.max(-1, Math.min(1, samples[i])) + view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true) + offset += 2 + } + + return arrayBuffer + } + + // Start recording meeting (video + audio) + const startRecording = async () => { + try { + if (!localStream) { + alert("Chưa có stream để ghi hình") + return + } + + // Create audio context for mixing audio + const audioContext = new (window.AudioContext || window.webkitAudioContext)({ + sampleRate: 44100 + }) + recordingAudioContextRef.current = audioContext + + // Create a destination node to mix all audio sources + const destination = audioContext.createMediaStreamDestination() + recordingDestinationRef.current = destination + + // Get all audio sources (local + remote) + const audioSources = [] + + // Add local audio source + const localAudioTrack = localStream.getAudioTracks()[0] + if (localAudioTrack && localAudioTrack.enabled) { + try { + const source = audioContext.createMediaStreamSource(new MediaStream([localAudioTrack])) + source.connect(destination) + audioSources.push(source) + } catch (e) { + console.warn("Failed to add local audio source:", e) + } + } + + // Add remote audio sources + remoteStreams.forEach((stream) => { + const remoteAudioTrack = stream.getAudioTracks()[0] + if (remoteAudioTrack && remoteAudioTrack.enabled) { + try { + const source = audioContext.createMediaStreamSource(new MediaStream([remoteAudioTrack])) + source.connect(destination) + audioSources.push(source) + } catch (e) { + console.warn("Failed to add remote audio source:", e) + } + } + }) + + if (audioSources.length === 0) { + alert("Không có audio để ghi âm") + audioContext.close() + return + } + + // Create combined stream with video and mixed audio + const combinedStream = new MediaStream() + + // Add local video track + const localVideoTrack = localStream.getVideoTracks()[0] + if (localVideoTrack) { + combinedStream.addTrack(localVideoTrack) + } + + // Add remote video tracks + remoteStreams.forEach((stream) => { + const videoTracks = stream.getVideoTracks() + videoTracks.forEach(track => { + if (track.enabled) { + combinedStream.addTrack(track) + } + }) + }) + + // Add mixed audio track + const mixedAudioTrack = destination.stream.getAudioTracks()[0] + if (mixedAudioTrack) { + combinedStream.addTrack(mixedAudioTrack) + } + + recordingStreamRef.current = combinedStream + + // Create MediaRecorder with the combined stream (video + audio) + let mimeType = 'video/webm' + if (MediaRecorder.isTypeSupported('video/webm;codecs=vp9,opus')) { + mimeType = 'video/webm;codecs=vp9,opus' + } else if (MediaRecorder.isTypeSupported('video/webm;codecs=vp8,opus')) { + mimeType = 'video/webm;codecs=vp8,opus' + } else if (MediaRecorder.isTypeSupported('video/webm')) { + mimeType = 'video/webm' + } + + const mediaRecorder = new MediaRecorder(combinedStream, { + mimeType: mimeType, + videoBitsPerSecond: 2500000, // 2.5 Mbps for video + }) + + recordedChunksRef.current = [] + + mediaRecorder.ondataavailable = (event) => { + if (event.data.size > 0) { + recordedChunksRef.current.push(event.data) + } + } + + mediaRecorder.onstop = async () => { + // Video recording stopped, wait for audio to finish + if (audioRecorderRef.current && audioRecorderRef.current.state !== 'inactive') { + audioRecorderRef.current.stop() + } + } + + // Create separate audio recorder for WAV conversion + let audioMimeType = 'audio/webm' + if (MediaRecorder.isTypeSupported('audio/webm;codecs=opus')) { + audioMimeType = 'audio/webm;codecs=opus' + } else if (MediaRecorder.isTypeSupported('audio/webm')) { + audioMimeType = 'audio/webm' + } else if (MediaRecorder.isTypeSupported('audio/ogg')) { + audioMimeType = 'audio/ogg' + } + + const audioRecorder = new MediaRecorder(destination.stream, { + mimeType: audioMimeType + }) + audioRecorderRef.current = audioRecorder + audioChunksRef.current = [] + + audioRecorder.ondataavailable = (event) => { + if (event.data.size > 0) { + audioChunksRef.current.push(event.data) + } + } + + audioRecorder.onstop = async () => { + try { + const endTime = new Date() + // Calculate duration correctly - recordingStartTimeRef.current is now a Date object + const startTime = recordingStartTimeRef.current instanceof Date + ? recordingStartTimeRef.current + : new Date(recordingStartTimeRef.current) + const recordingDuration = Math.floor((endTime - startTime) / 1000) + + // Disconnect all audio sources + audioSources.forEach(source => { + try { + source.disconnect() + } catch (e) { + console.warn("Error disconnecting source:", e) + } + }) + + // Create video blob (for future use) + const videoBlob = new Blob(recordedChunksRef.current, { type: mimeType }) + // Store video for future use (not uploading now) + console.log("Video recording saved (not uploaded):", videoBlob.size, "bytes") + + // Convert audio to WAV + const audioBlob = new Blob(audioChunksRef.current, { type: audioMimeType }) + const arrayBuffer = await audioBlob.arrayBuffer() + const audioBuffer = await audioContext.decodeAudioData(arrayBuffer) + + // Mix to mono + const channels = [] + for (let i = 0; i < audioBuffer.numberOfChannels; i++) { + channels.push(audioBuffer.getChannelData(i)) + } + + const mixed = new Float32Array(audioBuffer.length) + for (let i = 0; i < audioBuffer.length; i++) { + let sum = 0 + for (let j = 0; j < channels.length; j++) { + sum += channels[j][i] + } + mixed[i] = sum / channels.length + } + + // Convert to WAV + const wavBuffer = audioBufferToWav(mixed, audioBuffer.sampleRate) + const wavBlob = new Blob([wavBuffer], { type: 'audio/wav' }) + + // Store recording data instead of uploading immediately + // Will be uploaded when admin ends the meeting + pendingRecordingRef.current = { + audioBlob: wavBlob, + duration: recordingDuration, + startTime: startTime, // Use the Date object + endTime: endTime, + } + + console.log("Recording saved, waiting for meeting end to upload...") + + // Cleanup + if (recordingAudioContextRef.current) { + recordingAudioContextRef.current.close() + recordingAudioContextRef.current = null + } + recordingDestinationRef.current = null + recordedChunksRef.current = [] + audioChunksRef.current = [] + recordingStreamRef.current = null + audioRecorderRef.current = null + + } catch (error) { + console.error("Error processing recording:", error) + alert("Lỗi khi xử lý file ghi hình: " + error.message) + } + } + + mediaRecorderRef.current = mediaRecorder + recordingStartTimeRef.current = new Date() // Store as Date object + setRecordingTime(0) + setIsRecording(true) + + // Start both recorders + mediaRecorder.start(1000) // Collect data every second + audioRecorder.start(1000) // Collect audio data every second + + // Update recording time + recordingIntervalRef.current = setInterval(() => { + const elapsed = Math.floor((Date.now() - recordingStartTimeRef.current) / 1000) + setRecordingTime(elapsed) + }, 1000) + + } catch (error) { + console.error("Error starting recording:", error) + alert("Không thể bắt đầu ghi hình: " + error.message) + if (recordingAudioContextRef.current) { + recordingAudioContextRef.current.close() + recordingAudioContextRef.current = null + } + } + } + + // Upload recording to server + const uploadRecording = async (audioBlob, duration, startTime, endTime) => { + try { + const formData = new FormData() + formData.append("audio", audioBlob, `recording-${roomId}-${Date.now()}.wav`) + formData.append("roomId", roomId) + formData.append("recordingDuration", duration.toString()) + // Ensure startTime and endTime are Date objects + const startDate = startTime instanceof Date ? startTime : new Date(startTime) + const endDate = endTime instanceof Date ? endTime : new Date(endTime) + formData.append("startTime", startDate.toISOString()) + formData.append("endTime", endDate.toISOString()) + + const API_URL = process.env.REACT_APP_API_URL || "https://bkmeeting.soict.io/api" + const token = sessionStorage.getItem("token") || localStorage.getItem("token") + + const response = await fetch(`${API_URL}/minutes/upload`, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + }, + body: formData, + }) + + if (!response.ok) { + const error = await response.json() + throw new Error(error.message || "Lỗi khi upload file ghi âm") + } + + const result = await response.json() + console.log("Recording uploaded successfully:", result) + + // Trigger refresh of minutes list if callback exists + if (onRecordingUploaded) { + onRecordingUploaded(result) + } + } catch (error) { + console.error("Error uploading recording:", error) + alert("Lỗi khi upload file ghi âm: " + error.message) + } + } + + // Stop recording + const stopRecording = () => { + if (mediaRecorderRef.current && mediaRecorderRef.current.state !== 'inactive') { + mediaRecorderRef.current.stop() + } + if (audioRecorderRef.current && audioRecorderRef.current.state !== 'inactive') { + audioRecorderRef.current.stop() + } + setIsRecording(false) + + if (recordingIntervalRef.current) { + clearInterval(recordingIntervalRef.current) + recordingIntervalRef.current = null + } + } + + // Toggle recording + const toggleRecording = () => { + if (isRecording) { + stopRecording() + } else { + startRecording() + } + } + + // Format recording time + const formatRecordingTime = (seconds) => { + const mm = String(Math.floor(seconds / 60)).padStart(2, "0") + const ss = String(seconds % 60).padStart(2, "0") + return `${mm}:${ss}` + } + + // Handle end meeting (admin only) + const handleEndMeeting = async () => { + if (window.confirm("Bạn có chắc muốn kết thúc cuộc họp? Biên bản sẽ được tạo và tất cả thành viên sẽ bị đẩy ra.")) { + // Stop recording if active + if (isRecording) { + stopRecording() + // Wait a bit for recording to finish processing + await new Promise(resolve => setTimeout(resolve, 2000)) + } + + // Upload pending recording if exists + if (pendingRecordingRef.current) { + try { + await uploadRecording( + pendingRecordingRef.current.audioBlob, + pendingRecordingRef.current.duration, + pendingRecordingRef.current.startTime, + pendingRecordingRef.current.endTime + ) + pendingRecordingRef.current = null + } catch (error) { + console.error("Error uploading recording before ending meeting:", error) + alert("Lỗi khi upload biên bản: " + error.message) + } + } + + // Emit end-meeting event + if (socketRef.current) { + socketRef.current.emit("end-meeting", { roomId }) + } + } + } + + // Cleanup recording on unmount + useEffect(() => { + return () => { + if (mediaRecorderRef.current && mediaRecorderRef.current.state !== 'inactive') { + mediaRecorderRef.current.stop() + } + if (audioRecorderRef.current && audioRecorderRef.current.state !== 'inactive') { + audioRecorderRef.current.stop() + } + if (recordingIntervalRef.current) { + clearInterval(recordingIntervalRef.current) + } + if (recordingAudioContextRef.current) { + recordingAudioContextRef.current.close() + } + } + }, []) + + // Create/cleanup peer connections based on participants list + useEffect(() => { + if (!participants) { + console.log("No participants, skipping peer connection setup") + return + } + console.log("Participants changed:", participants.map(p => ({ userId: p.userId, userName: p.userName }))) + const currentIds = new Set(participants.map((p) => p.userId)) + + // Close PCs for users who left + ;[...peerConnectionsRef.current.keys()].forEach((uid) => { + if (!currentIds.has(uid)) { + console.log(`Removing peer connection for user ${uid} (left meeting)`) + removePeerConnection(uid) + } + }) + + // Create PCs and offer only for new users + participants.forEach((p) => { + if (p.userId === user?.id) { + console.log(`Skipping peer connection for self: ${p.userId}`) + return + } + if (!peerConnectionsRef.current.has(p.userId)) { + console.log(`Creating new peer connection for user ${p.userId} (${p.userName})`) + getOrCreatePeerConnection(p.userId).then(() => { + console.log(`Peer connection created for ${p.userId}, creating offer...`) + // Wait a bit to ensure tracks are added + setTimeout(() => { + createOfferForUser(p.userId) + }, 100) + }).catch((err) => { + console.error(`Error creating peer connection for ${p.userId}:`, err) + }) + } else { + console.log(`Peer connection already exists for user ${p.userId}`) + } + }) + }, [participants, user?.id]) // eslint-disable-line react-hooks/exhaustive-deps + + // Prevent state churn from frequent track events by batching remote streams update + const setRemoteStreamForUser = (userId, remoteStream) => { + setRemoteStreams((prev) => { + const existing = prev.get(userId) + if (existing === remoteStream) { + console.log(`[VideoCall] Stream for ${userId} unchanged, skipping update`) + return prev + } + console.log(`[VideoCall] Setting remote stream for ${userId}:`, { + streamId: remoteStream?.id, + active: remoteStream?.active, + videoTracks: remoteStream?.getVideoTracks()?.length || 0, + audioTracks: remoteStream?.getAudioTracks()?.length || 0, + videoTrackIds: remoteStream?.getVideoTracks()?.map(t => t.id) || [] + }) + const copy = new Map(prev) + copy.set(userId, remoteStream) + console.log(`[VideoCall] Remote streams map updated. Total: ${copy.size}`) + return copy + }) + } + + // Memoize RemoteVideo to prevent re-render on every parent re-render + const RemoteVideo = memo(({ stream, label }) => { + const ref = useRef(null) + const streamAttachedRef = useRef(null) // Track which stream is attached to prevent re-attachment + const playAttemptedRef = useRef(false) // Track if play() has been attempted + const initialCheckDoneRef = useRef(false) // Track if initial check has been done + const [isLive, setIsLive] = useState(false) + const [shouldShow, setShouldShow] = useState(false) // Stable state to prevent flickering + + // Attach stream ONCE and ensure it plays - only re-attach if stream actually changes + useEffect(() => { + if (!ref.current || !stream) { + console.log(`[VideoCall] Cannot attach stream for ${label}:`, { hasRef: !!ref.current, hasStream: !!stream }) + return + } + + // CRITICAL: Only attach if stream has actually changed + // This prevents re-attachment on every re-render, which causes flickering + if (streamAttachedRef.current === stream) { + // Stream already attached, no need to do anything + console.log(`[VideoCall] Stream already attached for ${label}, skipping re-attachment`) + return + } + + const videoTracks = stream.getVideoTracks() + const audioTracks = stream.getAudioTracks() + const hasVideoTracks = videoTracks.length > 0 + const hasNonEndedTracks = videoTracks.some(t => t.readyState !== "ended") + + console.log(`[VideoCall] Attaching stream for ${label}:`, { + streamId: stream.id, + streamActive: stream.active, + videoTracksCount: videoTracks.length, + audioTracksCount: audioTracks.length, + hasVideoTracks, + hasNonEndedTracks + }) + + // Attach stream + ref.current.srcObject = stream + streamAttachedRef.current = stream // Mark as attached + playAttemptedRef.current = false // Reset play attempt flag + + // CRITICAL: Ensure audio is enabled and not muted + ref.current.muted = false + ref.current.volume = 1.0 + + // If we have video tracks, play once + if (hasVideoTracks && hasNonEndedTracks && !playAttemptedRef.current) { + playAttemptedRef.current = true + console.log(`[VideoCall] Playing video for ${label} (has tracks)`) + const playPromise = ref.current.play() + if (playPromise !== undefined) { + playPromise + .then(() => { + console.log(`[VideoCall] Video playing successfully for ${label}`) + setIsLive(true) + }) + .catch((err) => { + console.warn(`[VideoCall] Error playing remote video for ${label}:`, err) + playAttemptedRef.current = false // Allow retry + }) + } + } + }, [stream, label]) // Only re-run if stream reference actually changes + + // Separate effect to handle play() when video is paused but has tracks + // This runs less frequently to avoid flickering + useEffect(() => { + if (!ref.current || !stream || streamAttachedRef.current !== stream) return + + const checkAndPlay = () => { + if (!ref.current || !stream) return + + const currentTracks = stream.getVideoTracks() + const hasTracks = currentTracks.length > 0 + const hasNonEnded = currentTracks.some(t => t.readyState !== "ended") + + // Only try to play if video is paused, has tracks, and we haven't attempted recently + if (hasTracks && hasNonEnded && ref.current.paused && !playAttemptedRef.current) { + console.log(`[VideoCall] Video paused but has tracks, trying to play for ${label}`) + playAttemptedRef.current = true + ref.current.play() + .then(() => { + setIsLive(prev => prev ? prev : true) + }) + .catch((err) => { + console.warn(`[VideoCall] Error playing video for ${label}:`, err) + playAttemptedRef.current = false // Allow retry + }) + } + } + + // Check less frequently to reduce flickering + const checkInterval = setInterval(checkAndPlay, 3000) + + return () => { + clearInterval(checkInterval) + } + }, [stream, label]) + + // Track mute/unmute/ended to avoid flicker: show avatar when not live + useEffect(() => { + if (!stream) { + console.log(`[VideoCall] No stream for ${label}, setting isLive=false`) + setIsLive(false) + return + } + + // CRITICAL: Get fresh tracks from stream each time this effect runs + // Stream reference might change, so we need to get current tracks + const getCurrentTracks = () => { + if (!stream) return [] + try { + return stream.getVideoTracks() + } catch (e) { + console.error(`[VideoCall] Error getting video tracks for ${label}:`, e) + return [] + } + } + + const videoTracks = getCurrentTracks() + // REMOVED: Excessive logging that runs on every render - causes performance issues + // Only log when tracks actually change + + if (videoTracks.length === 0) { + setIsLive(false) + return + } + + const update = () => { + // CRITICAL: Get fresh videoTracks from stream each time - don't use closure + // Stream tracks can change, so we need to check current state + const currentStream = stream + if (!currentStream) { + console.log(`[VideoCall] No stream for ${label} in update(), setting isLive=false`) + setIsLive(false) + return + } + + const currentVideoTracks = getCurrentTracks() + if (currentVideoTracks.length === 0) { + console.log(`[VideoCall] No video tracks for ${label} in update(), setting isLive=false`) + setIsLive(false) + return + } + + // ULTRA SIMPLIFIED: If we have tracks, show video (don't check anything else) + // Browser will handle rendering - if track is not ready, it just won't show frames yet + const hasTracks = currentVideoTracks.length > 0 + const hasNonEndedTracks = currentVideoTracks.some(t => t.readyState !== "ended") + + // SIMPLEST LOGIC: Show if has tracks and at least one is not ended + // Don't require "live" or "active" - browser will handle it + // This ensures video shows even if track is not "live" yet + const shouldShow = hasTracks && hasNonEndedTracks + + // REMOVED: Excessive logging that runs frequently - causes performance issues + // Only log when state actually changes (handled in setIsLive below) + + // CRITICAL: Only update state if value actually changed to prevent flickering + // Use functional update to compare with current state + // Also check if update is really needed - don't update if already correct + setIsLive(prev => { + if (prev === shouldShow) { + // State unchanged, no need to update + return prev + } + // Only log and update if there's an actual change + console.log(`[VideoCall] Updating isLive for ${label}: ${prev} -> ${shouldShow}`) + return shouldShow + }) + + // DON'T call play() here - it's handled by the separate useEffect + // Calling play() here causes flickering because update() can be called frequently + } + + // Set up event listeners on current tracks + // IMPORTANT: We need to set up listeners on the actual tracks in the stream + // These listeners will fire when track state changes + videoTracks.forEach((t) => { + // Remove old listeners first + t.onmute = null + t.onunmute = null + t.onended = null + + // Set new listeners - use debounced update to prevent flickering + t.onmute = () => { + console.log(`[VideoCall] Track muted for ${label}, trackId: ${t.id}`) + debouncedUpdate() + } + t.onunmute = () => { + console.log(`[VideoCall] Track unmuted for ${label}, trackId: ${t.id}`) + debouncedUpdate() + } + t.onended = () => { + console.log(`[VideoCall] Track ended for ${label}, trackId: ${t.id}`) + debouncedUpdate() + } + }) + + // Also listen to stream's addtrack/removetrack events + const handleAddTrack = (event) => { + console.log(`[VideoCall] Track added to stream for ${label}:`, event.track.kind, event.track.id) + debouncedUpdate() + // Set up listeners on new track + if (event.track.kind === "video") { + event.track.onmute = () => debouncedUpdate() + event.track.onunmute = () => debouncedUpdate() + event.track.onended = () => debouncedUpdate() + } + } + + const handleRemoveTrack = (event) => { + console.log(`[VideoCall] Track removed from stream for ${label}:`, event.track.kind, event.track.id) + debouncedUpdate() + } + + stream.addEventListener('addtrack', handleAddTrack) + stream.addEventListener('removetrack', handleRemoveTrack) + + // Debounce update calls to prevent flickering + let updateTimeout = null + const debouncedUpdate = () => { + if (updateTimeout) clearTimeout(updateTimeout) + updateTimeout = setTimeout(() => { + update() + }, 1000) // Increase debounce to 1 second to prevent frequent updates + } + + // CRITICAL: Only run initial check once when stream is first attached + // Don't run on every re-render to prevent flickering + // Reset flag when stream changes + if (streamAttachedRef.current !== stream) { + initialCheckDoneRef.current = false + } + if (!initialCheckDoneRef.current) { + initialCheckDoneRef.current = true + // Run initial check only once per stream + update() + } + + // REMOVED: Periodic interval check - this was causing flickering + // Event listeners (addtrack, removetrack, onmute, onunmute, onended) are sufficient + // to detect track changes. No need for periodic polling. + + return () => { + initialCheckDoneRef.current = false // Reset on cleanup + if (updateTimeout) clearTimeout(updateTimeout) + stream.removeEventListener('addtrack', handleAddTrack) + stream.removeEventListener('removetrack', handleRemoveTrack) + videoTracks.forEach((t) => { + t.onmute = null + t.onunmute = null + t.onended = null + }) + } + }, [stream, label]) + + // CRITICAL FIX: Don't calculate shouldDisplayVideo from stream in render + // This causes flickering because stream.getVideoTracks() is called on every render + // (which happens every second due to elapsed timer in parent component) + // Instead, only rely on isLive state which is updated by event listeners + + // Stabilize shouldShow state - only update based on isLive state + // Don't check stream directly in render to avoid flickering + // CRITICAL: Lock shouldShow state to prevent flickering - only update when isLive changes significantly + const lastIsLiveRef = useRef(isLive) + const shouldShowLockRef = useRef(false) // Lock to prevent rapid toggling + const lastShouldShowUpdateRef = useRef(Date.now()) + + useEffect(() => { + // Only update if isLive actually changed + if (lastIsLiveRef.current === isLive) return // No change + + // Prevent rapid updates - only allow update if enough time has passed + const now = Date.now() + const timeSinceLastUpdate = now - lastShouldShowUpdateRef.current + if (timeSinceLastUpdate < 2000 && shouldShowLockRef.current) { + // Too soon since last update, skip this update to prevent flickering + return + } + + lastIsLiveRef.current = isLive + + // Only update shouldShow based on isLive state + // isLive is updated by event listeners, not on every render + if (isLive === shouldShow) return // No change needed + + if (isLive) { + // Video is live, show it immediately + shouldShowLockRef.current = true + lastShouldShowUpdateRef.current = now + setShouldShow(true) + // Unlock after a delay + setTimeout(() => { + shouldShowLockRef.current = false + }, 3000) + } else { + // Video is not live, wait longer before hiding to prevent flickering + shouldShowLockRef.current = true + const timeout = setTimeout(() => { + // Double check isLive is still false before hiding + if (lastIsLiveRef.current === false) { + lastShouldShowUpdateRef.current = Date.now() + setShouldShow(false) + // Unlock after a delay + setTimeout(() => { + shouldShowLockRef.current = false + }, 3000) + } + }, 3000) // Wait 3 seconds before hiding to prevent flickering + return () => clearTimeout(timeout) + } + }, [isLive, shouldShow]) + + // Fallback: If stream exists and has tracks, ensure isLive is set + // This handles the case where isLive state might not be updated yet + // CRITICAL: Only check once when stream is first attached, not on every isLive change + useEffect(() => { + if (!stream) return + + // Only check if isLive is currently false - if it's already true, don't check again + if (isLive) return // Already live, no need to check + + const videoTracks = stream.getVideoTracks() + const hasTracks = videoTracks.length > 0 + const hasNonEndedTracks = videoTracks.some(t => t.readyState !== "ended") + + // If we have tracks but isLive is false, set it to true + // This is a one-time check when stream is first attached + if (hasTracks && hasNonEndedTracks) { + setIsLive(true) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [stream]) // Only run when stream reference changes, NOT when isLive changes (intentional) + + // CRITICAL: Use ref to update video style directly, not through React state + // This prevents re-render flickering when shouldShow changes + const videoStyleRef = useRef({ + visibility: "hidden", + opacity: 0, + position: "absolute", + top: 0, + left: 0, + width: "100%", + height: "100%", + objectFit: "cover", + transition: "none" + }) + + // Update video style directly via ref, not through React render + useEffect(() => { + if (!ref.current) return + + const newVisibility = shouldShow ? "visible" : "hidden" + const newOpacity = shouldShow ? 1 : 0 + + // Only update if actually changed to prevent flickering + if (videoStyleRef.current.visibility !== newVisibility || videoStyleRef.current.opacity !== newOpacity) { + videoStyleRef.current.visibility = newVisibility + videoStyleRef.current.opacity = newOpacity + ref.current.style.visibility = newVisibility + ref.current.style.opacity = newOpacity + } + }, [shouldShow]) + + // Reduced logging to prevent console spam on every render + // Only log when state actually changes + if (shouldShow !== isLive) { + console.log(`[VideoCall] Rendering RemoteVideo for ${label}:`, { + shouldShow, + isLive, + streamId: stream?.id, + hasStream: !!stream + }) + } + + return ( +
+
+ ) + }, (prevProps, nextProps) => { + // Only re-render if stream reference or label actually changes + // This prevents re-render on every parent component re-render (e.g., from timer) + return prevProps.stream === nextProps.stream && prevProps.label === nextProps.label + }) + + // 处理移动端横竖屏切换 / 页面可见性变化时的视频恢复 + useEffect(() => { + const tryResumeVideos = () => { + // 本地视频 + try { + if (localVideoRef.current && localVideoRef.current.srcObject && localVideoRef.current.paused) { + localVideoRef.current.play().catch(() => {}) + } + } catch {} + + // 远端视频:通过类名选择,调用 play() 恢复 + try { + const remoteVideoEls = document.querySelectorAll(".remote-video") + remoteVideoEls.forEach((el) => { + try { + if (el.srcObject && el.paused) { + el.play().catch(() => {}) + } + } catch {} + }) + } catch {} + } + + const handleOrientationChange = () => { + tryResumeVideos() + } + + const handleVisibilityChange = () => { + if (!document.hidden) { + tryResumeVideos() + } + } + + window.addEventListener("orientationchange", handleOrientationChange) + window.addEventListener("resize", handleOrientationChange) + document.addEventListener("visibilitychange", handleVisibilityChange) + + return () => { + window.removeEventListener("orientationchange", handleOrientationChange) + window.removeEventListener("resize", handleOrientationChange) + document.removeEventListener("visibilitychange", handleVisibilityChange) + } + }, [localStream]) // Add localStream dependency to ensure we have latest reference + + return ( +
+ {/* Top toolbar */} +
+
+ Meeting + {elapsed} +
+
+ + {/* Remote videos */} +
+ {useMemo(() => { + return Array.from(remoteStreams.entries()).map(([userId, stream]) => { + const participant = participants.find((p) => p.userId === userId) + // REMOVED: Don't call stream.getVideoTracks() in render - this causes flickering + // The RemoteVideo component will handle stream internally + return + }) + }, [remoteStreams, participants])} +
+ + {/* Debug info */} + {process.env.NODE_ENV === 'development' && ( +
+
Remote streams: {remoteStreams.size}
+
Peer connections: {peerConnectionsRef.current.size}
+
Local stream: {localStream ? 'Ready' : 'Not ready'}
+
Participants: {participants.length}
+
+ )} + + {/* If no remote, show placeholder avatar */} + {remoteStreams.size === 0 && ( +
+
{(user?.fullName || user?.email || "U").charAt(0).toUpperCase()}
+
Invite people to join you
+
+ )} + + {/* Local video */} +
+
+ + {/* Side people panel */} + {showPeoplePanel && ( +
+
Participants ({participants.length})
+
+ {participants.map((p) => ( +
+
{p.userName.charAt(0).toUpperCase()}
+
{p.userName}{p.userId === user?.id ? " (You)" : ""}
+
+ ))} +
+
+ )} + + {/* Bottom Control Bar */} +
+
+ + + + +
+
+ +
+
+ {user?.role === "admin" && ( + + )} + +
+
+
+ ) +} diff --git a/meeting-frontend/src/context/AuthContext.js b/meeting-frontend/src/context/AuthContext.js new file mode 100644 index 0000000..57bd9e6 --- /dev/null +++ b/meeting-frontend/src/context/AuthContext.js @@ -0,0 +1,48 @@ +"use client" + +import { createContext, useState, useEffect } from "react" + +export const AuthContext = createContext() + +export const AuthProvider = ({ children }) => { + const [user, setUser] = useState(null) + const [token, setToken] = useState(null) + const [loading, setLoading] = useState(true) + + useEffect(() => { + // Prefer sessionStorage (per-tab isolation). Fallback to localStorage once for backward compatibility + const sessionToken = sessionStorage.getItem("token") + const sessionUser = sessionStorage.getItem("user") + const localToken = localStorage.getItem("token") + const localUser = localStorage.getItem("user") + + if (sessionToken && sessionUser) { + setToken(sessionToken) + setUser(JSON.parse(sessionUser)) + } else if (localToken && localUser) { + // Migrate: load once from localStorage into sessionStorage so subsequent reloads stay tab-scoped + setToken(localToken) + setUser(JSON.parse(localUser)) + sessionStorage.setItem("token", localToken) + sessionStorage.setItem("user", localUser) + } + setLoading(false) + }, []) + + const login = (token, userData) => { + setToken(token) + setUser(userData) + // Store per-tab to avoid cross-tab account overwrites + sessionStorage.setItem("token", token) + sessionStorage.setItem("user", JSON.stringify(userData)) + } + + const logout = () => { + setToken(null) + setUser(null) + sessionStorage.removeItem("token") + sessionStorage.removeItem("user") + } + + return {children} +} diff --git a/meeting-frontend/src/hooks/useAuth.js b/meeting-frontend/src/hooks/useAuth.js new file mode 100644 index 0000000..ea90b99 --- /dev/null +++ b/meeting-frontend/src/hooks/useAuth.js @@ -0,0 +1,12 @@ +"use client" + +import { useContext } from "react" +import { AuthContext } from "../context/AuthContext" + +export const useAuth = () => { + const context = useContext(AuthContext) + if (!context) { + throw new Error("useAuth must be used within AuthProvider") + } + return context +} diff --git a/meeting-frontend/src/index.css b/meeting-frontend/src/index.css new file mode 100644 index 0000000..23f399a --- /dev/null +++ b/meeting-frontend/src/index.css @@ -0,0 +1,74 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +:root { + --primary: #4285f4; + --primary-dark: #1967d2; + --primary-soft: #e8f0fe; + --accent-pink: #ea4335; + --accent-green: #34a853; + --accent-orange: #fbbc04; + --bg-dark: #ffffff; + --bg-darker: #f5f5f5; + --surface: #ffffff; + --surface-muted: #fafafa; + --surface-glass: rgba(255, 255, 255, 0.98); + --text-light: #1a1a1a; + --text-muted: #3c4043; + --border-color: #e0e0e0; + --shadow-soft: 0 2px 8px rgba(0, 0, 0, 0.1); + --shadow-inner: inset 0 0 0 1px rgba(0, 0, 0, 0.08); + --success: #34a853; + --danger: #ea4335; + --warning: #fbbc04; +} + +body { + 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; + background: #ffffff; + color: var(--text-light); +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; +} + +button { + cursor: pointer; + border: none; + border-radius: 8px; + font-size: 16px; + font-weight: 600; + transition: all 0.3s ease; +} + +input, +textarea { + background-color: var(--surface); + border: 1px solid var(--border-color); + color: var(--text-light); + padding: 12px 16px; + border-radius: 12px; + font-size: 16px; + transition: all 0.25s ease; + box-shadow: var(--shadow-inner); +} + +input:focus, +textarea:focus { + outline: none; + border-color: var(--primary); + box-shadow: 0 0 0 4px rgba(11, 87, 208, 0.12); + background-color: var(--surface); +} + +input::placeholder, +textarea::placeholder { + color: var(--text-muted); +} diff --git a/meeting-frontend/src/index.js b/meeting-frontend/src/index.js new file mode 100644 index 0000000..412fefe --- /dev/null +++ b/meeting-frontend/src/index.js @@ -0,0 +1,11 @@ +import React from "react" +import ReactDOM from "react-dom/client" +import "./index.css" +import App from "./App" + +const root = ReactDOM.createRoot(document.getElementById("root")) +root.render( + + + , +) diff --git a/meeting-frontend/src/pages/AdminDashboardPage.js b/meeting-frontend/src/pages/AdminDashboardPage.js new file mode 100644 index 0000000..8669818 --- /dev/null +++ b/meeting-frontend/src/pages/AdminDashboardPage.js @@ -0,0 +1,159 @@ +"use client" + +import { useState, useEffect } from "react" +import { userAPI } from "../api/auth" +import Navbar from "../components/Navbar" +import "../styles/AdminDashboard.css" + +export default function AdminDashboardPage() { + const [stats, setStats] = useState({ totalUsers: 0, pendingUsers: 0, approvedUsers: 0 }) + const [pendingUsers, setPendingUsers] = useState([]) + const [loading, setLoading] = useState(true) + const [actionLoading, setActionLoading] = useState({}) + + useEffect(() => { + fetchData() + }, []) + + const fetchData = async () => { + try { + const [statsRes, usersRes] = await Promise.all([userAPI.getStats(), userAPI.getPendingUsers()]) + + setStats(statsRes.data) + setPendingUsers(usersRes.data) + } catch (error) { + console.error("Error fetching data:", error) + } finally { + setLoading(false) + } + } + + const handleApprove = async (userId) => { + setActionLoading((prev) => ({ ...prev, [userId]: true })) + try { + await userAPI.approveUser(userId) + setPendingUsers((prev) => prev.filter((u) => u._id !== userId)) + setStats((prev) => ({ + ...prev, + pendingUsers: prev.pendingUsers - 1, + approvedUsers: prev.approvedUsers + 1, + })) + } catch (error) { + console.error("Error approving user:", error) + } finally { + setActionLoading((prev) => ({ ...prev, [userId]: false })) + } + } + + const handleDelete = async (userId) => { + if (window.confirm("Bạn có chắc chắn muốn xóa người dùng này?")) { + setActionLoading((prev) => ({ ...prev, [userId]: true })) + try { + await userAPI.deleteUser(userId) + setPendingUsers((prev) => prev.filter((u) => u._id !== userId)) + setStats((prev) => ({ + ...prev, + totalUsers: prev.totalUsers - 1, + pendingUsers: prev.pendingUsers - 1, + })) + } catch (error) { + console.error("Error deleting user:", error) + } finally { + setActionLoading((prev) => ({ ...prev, [userId]: false })) + } + } + } + + return ( +
+ + +
+
+

Bảng điều khiển Admin

+

Quản lý người dùng và duyệt đăng ký

+
+ + {/* Stats Cards */} +
+
+
👥
+
+

Tổng người dùng

+

{stats.totalUsers}

+
+
+ +
+
+
+

Chờ duyệt

+

{stats.pendingUsers}

+
+
+ +
+
+
+

Đã duyệt

+

{stats.approvedUsers}

+
+
+
+ + {/* Pending Users Table */} +
+

Người dùng chờ duyệt

+ + {loading ? ( +
Đang tải...
+ ) : pendingUsers.length === 0 ? ( +
+

Không có người dùng nào chờ duyệt

+
+ ) : ( +
+ + + + + + + + + + + + {pendingUsers.map((pendingUser) => ( + + + + + + + + ))} + +
EmailHọ tênSố điện thoạiNgày đăng kýHành động
{pendingUser.email}{pendingUser.fullName}{pendingUser.phone || "-"}{new Date(pendingUser.createdAt).toLocaleDateString("vi-VN")} + + +
+
+ )} +
+
+
+ ) +} diff --git a/meeting-frontend/src/pages/DashboardPage.js b/meeting-frontend/src/pages/DashboardPage.js new file mode 100644 index 0000000..2f55b7c --- /dev/null +++ b/meeting-frontend/src/pages/DashboardPage.js @@ -0,0 +1,260 @@ +"use client" + +import { useState, useEffect } from "react" +import { useNavigate } from "react-router-dom" +import { useAuth } from "../hooks/useAuth" +import { meetingAPI, documentAPI } from "../api/auth" +import Navbar from "../components/Navbar" +import "../styles/Dashboard.css" + +export default function DashboardPage() { + const navigate = useNavigate() + const { user } = useAuth() + const [meetings, setMeetings] = useState([]) + const [loading, setLoading] = useState(true) + const [showCreateForm, setShowCreateForm] = useState(false) + const [formData, setFormData] = useState({ + title: "", + description: "", + }) + const [selectedFile, setSelectedFile] = useState(null) + const [uploading, setUploading] = useState(false) + const [uploadError, setUploadError] = useState(null) + + useEffect(() => { + fetchMeetings() + }, []) + + const fetchMeetings = async () => { + try { + const response = await meetingAPI.getMeetings() + setMeetings(response.data) + } catch (error) { + console.error("Error fetching meetings:", error) + } finally { + setLoading(false) + } + } + + const handleCreateMeeting = async (e) => { + e.preventDefault() + setUploading(true) + setUploadError(null) + + try { + // Create meeting first + const response = await meetingAPI.createMeeting(formData) + const newMeeting = response.data.meeting + + // If file is selected, upload it after meeting is created + if (selectedFile && newMeeting?.roomId) { + try { + const formDataUpload = new FormData() + formDataUpload.append("document", selectedFile) + formDataUpload.append("roomId", newMeeting.roomId) + + await documentAPI.uploadDocument(formDataUpload) + console.log("Document uploaded successfully") + } catch (uploadErr) { + console.error("Error uploading document:", uploadErr) + setUploadError("Cuộc họp đã được tạo nhưng upload tài liệu thất bại: " + (uploadErr.response?.data?.message || uploadErr.message)) + } + } + + // Reset form + setFormData({ title: "", description: "" }) + setSelectedFile(null) + setShowCreateForm(false) + fetchMeetings() + } catch (error) { + console.error("Error creating meeting:", error) + setUploadError(error.response?.data?.message || "Lỗi khi tạo cuộc họp") + } finally { + setUploading(false) + } + } + + const handleChange = (e) => { + const { name, value } = e.target + setFormData((prev) => ({ ...prev, [name]: value })) + } + + const handleFileSelect = (e) => { + const file = e.target.files[0] + if (file) { + // Validate file type + const allowedTypes = [ + "application/pdf", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/msword", + "text/plain", + ] + + if (!allowedTypes.includes(file.type)) { + setUploadError("Chỉ hỗ trợ file PDF, DOCX, DOC, TXT (tối đa 10MB)") + return + } + + // Validate file size (10MB) + if (file.size > 10 * 1024 * 1024) { + setUploadError("File quá lớn. Tối đa 10MB") + return + } + + setSelectedFile(file) + setUploadError(null) + } + } + + const formatFileSize = (bytes) => { + if (bytes < 1024) return bytes + " B" + if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(2) + " KB" + return (bytes / (1024 * 1024)).toFixed(2) + " MB" + } + + return ( +
+ + +
+
+

Chào mừng, {user?.fullName || user?.email}!

+

Quản lý các cuộc họp của bạn

+
+ + {user?.role === "admin" && ( +
+ + + {showCreateForm && ( +
+
+ + +
+ +
+ +