From a458a8a1037f162b9c4ce2f1da4abcbb97d1365e Mon Sep 17 00:00:00 2001 From: purifetchi <0xlunaric@gmail.com> Date: Sun, 8 Jun 2025 17:59:19 +0200 Subject: [PATCH] feat: init --- .env | 1 + .gitignore | 174 + Dockerfile | 12 + controllers/auth.controller.js | 60 + controllers/file.controller.js | 67 + controllers/serve.controller.js | 17 + db/db.js | 14 + docker-compose.yml | 17 + dtos/file.dto.js | 21 + dtos/login.dto.js | 8 + dtos/password.dto.js | 8 + dtos/user.dto.js | 8 + frontend/.gitignore | 30 + frontend/.vscode/extensions.json | 3 + frontend/Dockerfile | 12 + frontend/README.md | 33 + frontend/env.d.ts | 1 + frontend/index.html | 13 + frontend/package-lock.json | 4381 ++++++++++++++++++ frontend/package.json | 37 + frontend/package.zip | Bin 0 -> 54770 bytes frontend/postcss.config.js | 6 + frontend/public/favicon.ico | Bin 0 -> 4286 bytes frontend/src/App.vue | 15 + frontend/src/api/axiosClient.ts | 42 + frontend/src/api/user.ts | 16 + frontend/src/assets/base.css | 14 + frontend/src/assets/main.css | 1 + frontend/src/components/FileList.vue | 63 + frontend/src/components/FileListItem.vue | 106 + frontend/src/components/Menu.vue | 91 + frontend/src/components/PasswordChanger.vue | 159 + frontend/src/components/Uploader.vue | 201 + frontend/src/dto/file-creation-error-dto.ts | 3 + frontend/src/dto/file-creation-result-dto.ts | 3 + frontend/src/dto/file-dto.ts | 5 + frontend/src/dto/password-change-dto.ts | 4 + frontend/src/dto/user-info-dto.ts | 4 + frontend/src/main.ts | 25 + frontend/src/router/index.ts | 60 + frontend/src/views/HomeView.vue | 30 + frontend/src/views/LoginView.vue | 74 + frontend/src/views/RegisterView.vue | 130 + frontend/src/views/SettingsView.vue | 21 + frontend/tailwind.config.js | 11 + frontend/tsconfig.app.json | 12 + frontend/tsconfig.json | 11 + frontend/tsconfig.node.json | 18 + frontend/vite.config.ts | 29 + index.js | 26 + middleware/auth.js | 28 + models/Upload.js | 29 + models/User.js | 15 + package-lock.json | 1652 +++++++ package.json | 25 + services/driveService.js | 28 + services/uploadService.js | 54 + services/userService.js | 36 + validators/login.validator.js | 11 + validators/password.validator.js | 11 + validators/upload.validator.js | 12 + 61 files changed, 7998 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 controllers/auth.controller.js create mode 100644 controllers/file.controller.js create mode 100644 controllers/serve.controller.js create mode 100644 db/db.js create mode 100644 docker-compose.yml create mode 100644 dtos/file.dto.js create mode 100644 dtos/login.dto.js create mode 100644 dtos/password.dto.js create mode 100644 dtos/user.dto.js create mode 100644 frontend/.gitignore create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/Dockerfile create mode 100644 frontend/README.md create mode 100644 frontend/env.d.ts create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/package.zip create mode 100644 frontend/postcss.config.js create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/axiosClient.ts create mode 100644 frontend/src/api/user.ts create mode 100644 frontend/src/assets/base.css create mode 100644 frontend/src/assets/main.css create mode 100644 frontend/src/components/FileList.vue create mode 100644 frontend/src/components/FileListItem.vue create mode 100644 frontend/src/components/Menu.vue create mode 100644 frontend/src/components/PasswordChanger.vue create mode 100644 frontend/src/components/Uploader.vue create mode 100644 frontend/src/dto/file-creation-error-dto.ts create mode 100644 frontend/src/dto/file-creation-result-dto.ts create mode 100644 frontend/src/dto/file-dto.ts create mode 100644 frontend/src/dto/password-change-dto.ts create mode 100644 frontend/src/dto/user-info-dto.ts create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/router/index.ts create mode 100644 frontend/src/views/HomeView.vue create mode 100644 frontend/src/views/LoginView.vue create mode 100644 frontend/src/views/RegisterView.vue create mode 100644 frontend/src/views/SettingsView.vue create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 index.js create mode 100644 middleware/auth.js create mode 100644 models/Upload.js create mode 100644 models/User.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 services/driveService.js create mode 100644 services/uploadService.js create mode 100644 services/userService.js create mode 100644 validators/login.validator.js create mode 100644 validators/password.validator.js create mode 100644 validators/upload.validator.js diff --git a/.env b/.env new file mode 100644 index 0000000..4c0fd4e --- /dev/null +++ b/.env @@ -0,0 +1 @@ +JWT_SECRET=supersekretnyklucz123 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8321430 --- /dev/null +++ b/.gitignore @@ -0,0 +1,174 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.svclog +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml +*.azurePubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +packages/ +## TODO: If the tool you use requires repositories.config, also uncomment the next line +!packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +![Ss]tyle[Cc]op.targets +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml + +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +_NCrunch* + +.idea/ + +appsettings.json + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo + +PinkSea.Gateway/wwwroot/ + +mizuki.db* + +uploads/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8ae2683 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM node:20 + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 3000 + +CMD ["node", "index.js"] diff --git a/controllers/auth.controller.js b/controllers/auth.controller.js new file mode 100644 index 0000000..5daba5a --- /dev/null +++ b/controllers/auth.controller.js @@ -0,0 +1,60 @@ +const express = require('express'); +const router = express.Router(); +const userService = require('../services/userService'); +const { generateToken, authMiddleware, getActiveUser } = require('../middleware/auth'); +const { loginSchema } = require('../validators/login.validator'); +const { passwordChangeSchema } = require('../validators/password.validator'); + +router.post('/login', async (req, res) => { + const { error } = loginSchema.validate(req.body); + if (error) return res.status(400).json({ reason: error.message }); + + const isValid = await userService.checkPassword(req.body.username, req.body.password); + if (!isValid) return res.status(401).json({ reason: 'Invalid username or password' }); + + const user = await userService.getUserByUsername(req.body.username); + const token = generateToken(user); + res.json({ token }); +}); + +router.post('/register', async (req, res) => { + const { error } = loginSchema.validate(req.body); + if (error) return res.status(400).json({ reason: error.message }); + + if (await userService.usernameTaken(req.body.username)) + return res.status(409).json({ reason: 'This user already exists.' }); + + const user = await userService.createUser(req.body.username, req.body.password); + if (!user) return res.status(500).json({ reason: 'Failed to register user' }); + + const token = generateToken(user); + res.json({ token }); +}); + +router.get('/check', authMiddleware, async (req, res) => { + const user = await getActiveUser(req); + if (user) return res.sendStatus(200); + return res.sendStatus(403); +}); + +router.post('/change_password', authMiddleware, async (req, res) => { + const { error } = passwordChangeSchema.validate(req.body); + if (error) return res.status(400).json({ reason: error.message }); + + const user = await getActiveUser(req); + if (!user) return res.sendStatus(401); + + const validOld = await userService.checkPassword(user.username, req.body.oldPassword); + if (!validOld) return res.sendStatus(409); + + await userService.updatePassword(user._id, req.body.newPassword); + res.sendStatus(200); +}); + +router.get('/info', authMiddleware, async (req, res) => { + const user = await getActiveUser(req); + if (!user) return res.sendStatus(401); + res.json({ username: user.username, avatar: null }); +}); + +module.exports = router; diff --git a/controllers/file.controller.js b/controllers/file.controller.js new file mode 100644 index 0000000..f2f4177 --- /dev/null +++ b/controllers/file.controller.js @@ -0,0 +1,67 @@ +const express = require('express'); +const multer = require('multer'); +const upload = multer(); +const router = express.Router(); +const uploadService = require('../services/uploadService'); +const { getActiveUser, authMiddleware } = require('../middleware/auth'); +const { validateFile } = require('../validators/upload.validator'); +const { toFileDto, fileCreationErrorDto, fileCreationResultDto } = require('../dtos/file.dto'); + +router.post('/', authMiddleware, upload.single('file'), async (req, res) => { + const validation = validateFile(req.file); + if (!validation.valid) { + return res.status(400).json(fileCreationErrorDto(validation.reason)); + } + + const user = await getActiveUser(req); + const result = await uploadService.createUpload(user, req.file); + if (!result) { + return res.status(500).json(fileCreationErrorDto('Error processing upload')); + } + + res.status(200).json(fileCreationResultDto(result.filename)); +}); + +router.get('/', authMiddleware, async (req, res) => { + const user = await getActiveUser(req); + const uploads = await uploadService.getUserUploads(user); + res.json(uploads.map(toFileDto)); +}); + +router.delete('/:filename', authMiddleware, async (req, res) => { + const user = await getActiveUser(req); + const { filename } = req.params; + + try { + await uploadService.deleteUpload(user, filename); + res.sendStatus(200); + } catch (err) { + console.error(err); + res.status(500).send('Error deleting upload'); + } +}); + +router.put('/:filename', authMiddleware, async (req, res) => { + const user = await getActiveUser(req); + const { filename } = req.params; + const { newFilename } = req.body; + + if (!newFilename || typeof newFilename !== 'string') { + return res.status(400).json({ message: 'New filename is required and must be a string' }); + } + + try { + const success = await uploadService.renameUpload(user, filename, newFilename); + if (!success) { + return res.status(404).json({ message: 'File not found or not authorized' }); + } + + res.status(200).json({ message: 'File renamed successfully' }); + } catch (err) { + console.error('Error renaming file:', err); + res.status(500).json({ message: 'Internal server error' }); + } +}); + + +module.exports = router; diff --git a/controllers/serve.controller.js b/controllers/serve.controller.js new file mode 100644 index 0000000..9e0505c --- /dev/null +++ b/controllers/serve.controller.js @@ -0,0 +1,17 @@ +const express = require('express'); +const router = express.Router(); +const uploadService = require('../services/uploadService'); +const driveService = require('../services/driveService'); + +router.get('/:filename', async (req, res) => { + const file = await uploadService.getUploadByFilename(req.params.filename); + if (!file) return res.sendStatus(404); + + const stream = driveService.openFile(req.params.filename); + if (!stream) return res.sendStatus(404); + + res.setHeader('Content-Disposition', `attachment; filename="${file.originalFilename}"`); + stream.pipe(res); +}); + +module.exports = router; diff --git a/db/db.js b/db/db.js new file mode 100644 index 0000000..d908a5a --- /dev/null +++ b/db/db.js @@ -0,0 +1,14 @@ +const mongoose = require('mongoose'); + +const connectDB = async () => { + try { + mongoose.connect('mongodb://root:example@localhost:27017/your-db-name?authSource=admin') + + console.log('✅ MongoDB connected'); + } catch (err) { + console.error('❌ MongoDB connection error:', err.message); + process.exit(1); + } +}; + +module.exports = connectDB; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c8333df --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3.8' + +services: + mongo: + image: mongo:6.0 + container_name: mongodb + restart: always + ports: + - "27017:27017" + volumes: + - mongo-data:/data/db + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: example + +volumes: + mongo-data: diff --git a/dtos/file.dto.js b/dtos/file.dto.js new file mode 100644 index 0000000..bdada13 --- /dev/null +++ b/dtos/file.dto.js @@ -0,0 +1,21 @@ +function toFileDto(upload) { + return { + filename: upload.filename, + originalFilename: upload.originalFilename, + sizeInBytes: upload.sizeInBytes + }; +} + +function fileCreationResultDto(filename) { + return { filename }; +} + +function fileCreationErrorDto(reason) { + return { reason }; +} + +module.exports = { + toFileDto, + fileCreationResultDto, + fileCreationErrorDto +}; diff --git a/dtos/login.dto.js b/dtos/login.dto.js new file mode 100644 index 0000000..4b30f66 --- /dev/null +++ b/dtos/login.dto.js @@ -0,0 +1,8 @@ +const Joi = require('joi'); + +const loginSchema = Joi.object({ + username: Joi.string().required(), + password: Joi.string().required() +}); + +module.exports = { loginSchema }; diff --git a/dtos/password.dto.js b/dtos/password.dto.js new file mode 100644 index 0000000..24d4ab6 --- /dev/null +++ b/dtos/password.dto.js @@ -0,0 +1,8 @@ +const Joi = require('joi'); + +const passwordChangeSchema = Joi.object({ + oldPassword: Joi.string().required(), + newPassword: Joi.string().required() +}); + +module.exports = { passwordChangeSchema }; diff --git a/dtos/user.dto.js b/dtos/user.dto.js new file mode 100644 index 0000000..33b1faa --- /dev/null +++ b/dtos/user.dto.js @@ -0,0 +1,8 @@ +function userInfoDto(user, avatar = null) { + return { + username: user.username, + avatar: avatar || null + }; +} + +module.exports = { userInfoDto }; diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..781f9b2 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,12 @@ +FROM node:20 + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 3000 + +CMD ["node", "index.js"] \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..ac91ca2 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,33 @@ +# mizuki-frontend + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` diff --git a/frontend/env.d.ts b/frontend/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..a888544 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..2bf4f87 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,4381 @@ +{ + "name": "mizuki-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mizuki-frontend", + "version": "0.0.0", + "dependencies": { + "@primevue/forms": "^4.2.5", + "@primevue/themes": "^4.2.5", + "axios": "^1.9.0", + "primeicons": "^7.0.0", + "primevue": "^4.2.5", + "tailwindcss-primeui": "^0.4.0", + "vue": "^3.5.13", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.0", + "@types/node": "^22.10.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/tsconfig": "^0.7.0", + "autoprefixer": "^10.4.20", + "npm-run-all2": "^7.0.2", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "typescript": "~5.6.3", + "vite": "^6.0.5", + "vite-plugin-vue-devtools": "^7.6.8", + "vue-tsc": "^2.1.10" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "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/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", + "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "dependencies": { + "@babel/types": "^7.26.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", + "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-decorators": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz", + "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", + "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "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/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "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==", + "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==", + "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==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true + }, + "node_modules/@primeuix/forms": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@primeuix/forms/-/forms-0.0.2.tgz", + "integrity": "sha512-DpecPQd/Qf/kav4LKCaIeGuT3AkwhJzuHCkLANTVlN/zBvo8KIj3OZHsCkm0zlIMVVnaJdtx1ULNlRQdudef+A==", + "dependencies": { + "@primeuix/utils": "^0.3.0" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/styled": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@primeuix/styled/-/styled-0.3.2.tgz", + "integrity": "sha512-ColZes0+/WKqH4ob2x8DyNYf1NENpe5ZguOvx5yCLxaP8EIMVhLjWLO/3umJiDnQU4XXMLkn2mMHHw+fhTX/mw==", + "dependencies": { + "@primeuix/utils": "^0.3.2" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primeuix/utils": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@primeuix/utils/-/utils-0.3.2.tgz", + "integrity": "sha512-B+nphqTQeq+i6JuICLdVWnDMjONome2sNz0xI65qIOyeB4EF12CoKRiCsxuZ5uKAkHi/0d1LqlQ9mIWRSdkavw==", + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primevue/core": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@primevue/core/-/core-4.2.5.tgz", + "integrity": "sha512-+oWBIQs5dLd2Ini4KEVOlvPILk989EHAskiFS3R/dz3jeOllJDMZFcSp8V9ddV0R3yDaPdLVkfHm2Q5t42kU2Q==", + "dependencies": { + "@primeuix/styled": "^0.3.2", + "@primeuix/utils": "^0.3.2" + }, + "engines": { + "node": ">=12.11.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/@primevue/forms": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@primevue/forms/-/forms-4.2.5.tgz", + "integrity": "sha512-5jarJQ9Qv32bOo/0tY5bqR3JZI6+YmmoUQ2mjhVSbVElQsE4FNfhT7a7JwF+xgBPMPc8KWGNA1QB248HhPNVAg==", + "dependencies": { + "@primeuix/forms": "^0.0.2", + "@primeuix/utils": "^0.3.2", + "@primevue/core": "4.2.5" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primevue/icons": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@primevue/icons/-/icons-4.2.5.tgz", + "integrity": "sha512-WFbUMZhQkXf/KmwcytkjGVeJ9aGEDXjP3uweOjQZMmRdEIxFnqYYpd90wE90JE1teZn3+TVnT4ZT7ejGyEXnFQ==", + "dependencies": { + "@primeuix/utils": "^0.3.2", + "@primevue/core": "4.2.5" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@primevue/themes": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@primevue/themes/-/themes-4.2.5.tgz", + "integrity": "sha512-8F7yA36xYIKtNuAuyBdZZEks/bKDwlhH5WjpqGGB0FdwfAEoBYsynQ5sdqcT2Lb/NsajHmS5lc++Ttlvr1g1Lw==", + "dependencies": { + "@primeuix/styled": "^0.3.2" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", + "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", + "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", + "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", + "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", + "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", + "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", + "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", + "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", + "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", + "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", + "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", + "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", + "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", + "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", + "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", + "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", + "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", + "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", + "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.0.tgz", + "integrity": "sha512-twLQ77zevtxobBOD4ToAtVmuYrpeYUh3qh+TEp+08IWhpsrIflVHqQ1F1CiPxQGL7doCdBIOOCF+1Tm833faNg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", + "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", + "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.4.11" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", + "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", + "dev": true + }, + "node_modules/@volar/typescript": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz", + "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.11", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", + "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", + "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@vue/babel-helper-vue-transform-on": "1.2.5", + "@vue/babel-plugin-resolve-type": "1.2.5", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", + "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/parser": "^7.25.6", + "@vue/compiler-sfc": "^3.5.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "node_modules/@vue/devtools-core": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.0.tgz", + "integrity": "sha512-tSO3pghV5RZGSonZ87S2fOGru3X93epmar5IjZOWjHxH6XSwnK5UbR2aW5puZV+LgLoVYrcNou3krSo5k1F31g==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.7.0", + "@vue/devtools-shared": "^7.7.0", + "mitt": "^3.0.1", + "nanoid": "^5.0.9", + "pathe": "^1.1.2", + "vite-hot-client": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-core/node_modules/nanoid": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.0.tgz", + "integrity": "sha512-5cvZ+6SA88zKC8XiuxUfqpdTwVjJbvYnQZY5NReh7qlSGPvVDjjzyEtW+gdzLXNSd8tStgOjAdMCpvDQamUXtA==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.7.0", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.0.tgz", + "integrity": "sha512-jtlQY26R5thQxW9YQTpXbI0HoK0Wf9Rd4ekidOkRvSy7ChfK0kIU6vvcBtjj87/EcpeOSK49fZAicaFNJcoTcQ==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", + "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", + "dev": true, + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.4.9", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", + "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "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==" + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001692", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", + "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 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==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "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==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.80", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz", + "integrity": "sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==", + "dev": true + }, + "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==" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "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==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/execa": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", + "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.3", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.0", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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==", + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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==", + "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==", + "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==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", + "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "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==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "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==", + "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==", + "dev": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "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==", + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-7.0.2.tgz", + "integrity": "sha512-7tXR+r9hzRNOPNTvXegM+QzCuMjzUIIq66VDunL6j60O4RrExx32XUhlrS7UK4VcdGw5/Wxzb3kfNcFix9JKDA==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.6", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0", + "npm": ">= 9" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==" + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "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==", + "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==" + }, + "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==", + "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==" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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==", + "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-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-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" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "node_modules/pretty-ms": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dev": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/primeicons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==" + }, + "node_modules/primevue": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/primevue/-/primevue-4.2.5.tgz", + "integrity": "sha512-7UMOIJvdFz4jQyhC76yhNdSlHtXvVpmE2JSo2ndUTBWjWJOkYyT562rQ4ayO+bMdJLtzBGqgY64I9ZfEvNd7vQ==", + "dependencies": { + "@primeuix/styled": "^0.3.2", + "@primeuix/utils": "^0.3.2", + "@primevue/core": "4.2.5", + "@primevue/icons": "4.2.5" + }, + "engines": { + "node": ">=12.11.0" + } + }, + "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==" + }, + "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" + } + ] + }, + "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==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rollup": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", + "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.30.1", + "@rollup/rollup-android-arm64": "4.30.1", + "@rollup/rollup-darwin-arm64": "4.30.1", + "@rollup/rollup-darwin-x64": "4.30.1", + "@rollup/rollup-freebsd-arm64": "4.30.1", + "@rollup/rollup-freebsd-x64": "4.30.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", + "@rollup/rollup-linux-arm-musleabihf": "4.30.1", + "@rollup/rollup-linux-arm64-gnu": "4.30.1", + "@rollup/rollup-linux-arm64-musl": "4.30.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", + "@rollup/rollup-linux-riscv64-gnu": "4.30.1", + "@rollup/rollup-linux-s390x-gnu": "4.30.1", + "@rollup/rollup-linux-x64-gnu": "4.30.1", + "@rollup/rollup-linux-x64-musl": "4.30.1", + "@rollup/rollup-win32-arm64-msvc": "4.30.1", + "@rollup/rollup-win32-ia32-msvc": "4.30.1", + "@rollup/rollup-win32-x64-msvc": "4.30.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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==" + }, + "node_modules/string-width-cjs/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-primeui": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss-primeui/-/tailwindcss-primeui-0.4.0.tgz", + "integrity": "sha512-YYC7B7Yyzm1/4pEGgpf1ABAhbrKY++LuPoUamnKE7fTPO5Ct/Qr/dT+Uq2yiVhQnaW1zHQpYnThxfksaxhlDfQ==", + "peerDependencies": { + "tailwindcss": ">=3.1.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "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==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==" + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vite": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.7.tgz", + "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-hot-client": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.4.tgz", + "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", + "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.3", + "debug": "^4.3.7", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.1.1", + "sirv": "^3.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.0.tgz", + "integrity": "sha512-1dWiREwIl4JELwXGHXih80hIgjcViMcZGr3j0edo6NQ9kNzAOxMIUgFqc/TO1ary4ZroJUxoB0YDI6jnDf13iQ==", + "dev": true, + "dependencies": { + "@vue/devtools-core": "^7.7.0", + "@vue/devtools-kit": "^7.7.0", + "@vue/devtools-shared": "^7.7.0", + "execa": "^9.5.1", + "sirv": "^3.0.0", + "vite-plugin-inspect": "0.8.9", + "vite-plugin-vue-inspector": "^5.3.1" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", + "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" + } + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.0.tgz", + "integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~2.4.11", + "@vue/language-core": "2.2.0" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..5b113e1 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,37 @@ +{ + "name": "mizuki-frontend", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build" + }, + "dependencies": { + "@primevue/forms": "^4.2.5", + "@primevue/themes": "^4.2.5", + "axios": "^1.9.0", + "primeicons": "^7.0.0", + "primevue": "^4.2.5", + "tailwindcss-primeui": "^0.4.0", + "vue": "^3.5.13", + "vue-router": "^4.5.0" + }, + "devDependencies": { + "@tsconfig/node22": "^22.0.0", + "@types/node": "^22.10.2", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/tsconfig": "^0.7.0", + "autoprefixer": "^10.4.20", + "npm-run-all2": "^7.0.2", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "typescript": "~5.6.3", + "vite": "^6.0.5", + "vite-plugin-vue-devtools": "^7.6.8", + "vue-tsc": "^2.1.10" + } +} diff --git a/frontend/package.zip b/frontend/package.zip new file mode 100644 index 0000000000000000000000000000000000000000..25f39b61ed68023c187eeaeb4446e9f0f40a7957 GIT binary patch literal 54770 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¬>G<(OH6 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 literal 0 HcmV?d00001 diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..21b6676 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/frontend/src/api/axiosClient.ts b/frontend/src/api/axiosClient.ts new file mode 100644 index 0000000..31bbbce --- /dev/null +++ b/frontend/src/api/axiosClient.ts @@ -0,0 +1,42 @@ +import axios from "axios"; +import router from "@/router"; + +const axiosClient = axios.create({ + baseURL: "http://localhost:3000", + headers: { + "Content-Type": "application/json", + }, +}); + +axiosClient.interceptors.request.use((config) => { + const token = localStorage.getItem("token"); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; +}, (error) => { + return Promise.reject(error); +}); + +axiosClient.interceptors.response.use( + (response) => response, + (error) => { + if (error.response?.status === 401 || error.response?.status === 403) { + const currentRoute = router.currentRoute.value; + + const requiresAuth = currentRoute.matched.some( + r => r.meta.requiresAuth + ); + + if (requiresAuth) { + localStorage.removeItem("token"); + router.push("/login"); + } + } + + return Promise.reject(error); + } +); + + +export default axiosClient; diff --git a/frontend/src/api/user.ts b/frontend/src/api/user.ts new file mode 100644 index 0000000..4b7df3a --- /dev/null +++ b/frontend/src/api/user.ts @@ -0,0 +1,16 @@ +import axiosClient from "@/api/axiosClient"; +import type { UserInfoDto } from "@/dto/user-info-dto"; + +export const checkIfLoggedIn = async (): Promise => { + try { + const resp = await axiosClient.get("/api/user/check"); + return resp.status === 200; + } catch { + return false; + } +}; + +export const getUserInfo = async (): Promise => { + const resp = await axiosClient.get("/api/user/info"); + return resp.data as UserInfoDto; +}; diff --git a/frontend/src/assets/base.css b/frontend/src/assets/base.css new file mode 100644 index 0000000..26c3f4e --- /dev/null +++ b/frontend/src/assets/base.css @@ -0,0 +1,14 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); +@import 'primeicons/primeicons.css'; +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +html, body, #app { + width: 100%; + height: 100%; +} + +* { + font-family: "Inter", serif; +} \ No newline at end of file diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css new file mode 100644 index 0000000..a152199 --- /dev/null +++ b/frontend/src/assets/main.css @@ -0,0 +1 @@ +@import './base.css'; diff --git a/frontend/src/components/FileList.vue b/frontend/src/components/FileList.vue new file mode 100644 index 0000000..41ae19b --- /dev/null +++ b/frontend/src/components/FileList.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/frontend/src/components/FileListItem.vue b/frontend/src/components/FileListItem.vue new file mode 100644 index 0000000..7b0fe8b --- /dev/null +++ b/frontend/src/components/FileListItem.vue @@ -0,0 +1,106 @@ + + + diff --git a/frontend/src/components/Menu.vue b/frontend/src/components/Menu.vue new file mode 100644 index 0000000..15ee826 --- /dev/null +++ b/frontend/src/components/Menu.vue @@ -0,0 +1,91 @@ + + + + + + \ No newline at end of file diff --git a/frontend/src/components/PasswordChanger.vue b/frontend/src/components/PasswordChanger.vue new file mode 100644 index 0000000..e4fcb44 --- /dev/null +++ b/frontend/src/components/PasswordChanger.vue @@ -0,0 +1,159 @@ + + + + + + \ No newline at end of file diff --git a/frontend/src/components/Uploader.vue b/frontend/src/components/Uploader.vue new file mode 100644 index 0000000..0648f72 --- /dev/null +++ b/frontend/src/components/Uploader.vue @@ -0,0 +1,201 @@ + + + + + + diff --git a/frontend/src/dto/file-creation-error-dto.ts b/frontend/src/dto/file-creation-error-dto.ts new file mode 100644 index 0000000..0deeb5e --- /dev/null +++ b/frontend/src/dto/file-creation-error-dto.ts @@ -0,0 +1,3 @@ +export interface FileCreationErrorDto { + reason: string +} \ No newline at end of file diff --git a/frontend/src/dto/file-creation-result-dto.ts b/frontend/src/dto/file-creation-result-dto.ts new file mode 100644 index 0000000..6d11410 --- /dev/null +++ b/frontend/src/dto/file-creation-result-dto.ts @@ -0,0 +1,3 @@ +export interface FileCreationResultDto { + filename: string +} \ No newline at end of file diff --git a/frontend/src/dto/file-dto.ts b/frontend/src/dto/file-dto.ts new file mode 100644 index 0000000..2b199eb --- /dev/null +++ b/frontend/src/dto/file-dto.ts @@ -0,0 +1,5 @@ +export default interface FileDto { + filename: string, + originalFilename: string, + sizeInBytes: number +} \ No newline at end of file diff --git a/frontend/src/dto/password-change-dto.ts b/frontend/src/dto/password-change-dto.ts new file mode 100644 index 0000000..97a3fdd --- /dev/null +++ b/frontend/src/dto/password-change-dto.ts @@ -0,0 +1,4 @@ +export interface PasswordChangeDto { + oldPassword: string; + newPassword: string; +} \ No newline at end of file diff --git a/frontend/src/dto/user-info-dto.ts b/frontend/src/dto/user-info-dto.ts new file mode 100644 index 0000000..0df3b38 --- /dev/null +++ b/frontend/src/dto/user-info-dto.ts @@ -0,0 +1,4 @@ +export interface UserInfoDto { + username: string, + avatar: string | null +} \ No newline at end of file diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..49d3fc8 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,25 @@ +import './assets/main.css' + +import { createApp } from 'vue' +import App from './App.vue' +import router from './router' +import PrimeVue from 'primevue/config'; +import ToastService from 'primevue/toastservice'; +import Aura from '@primevue/themes/aura'; +import ConfirmationService from 'primevue/confirmationservice'; + +const app = createApp(App) + +app.use(router) +app.use(PrimeVue, { + theme: { + preset: Aura, + options: { + darkModeSelector: '.my-app-dark', + } + } +}); +app.use(ToastService); +app.use(ConfirmationService); + +app.mount('#app') diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts new file mode 100644 index 0000000..43a1a1b --- /dev/null +++ b/frontend/src/router/index.ts @@ -0,0 +1,60 @@ +import { createRouter, createWebHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' +import LoginView from "@/views/LoginView.vue"; +import RegisterView from "@/views/RegisterView.vue"; +import SettingsView from "@/views/SettingsView.vue"; +import { checkIfLoggedIn } from "@/api/user"; + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: HomeView, + meta: { requiresAuth: true } + }, + { + path: '/settings', + name: 'settings', + component: SettingsView, + meta: { requiresAuth: true } + }, + { + path: '/login', + name: 'login', + component: LoginView, + meta: { redirectIfLoggedIn: true } + }, + { + path: '/register', + name: 'register', + component: RegisterView, + meta: { redirectIfLoggedIn: true } + } + ], +}); + +router.beforeEach(async (to, from, next) => { + const requiresAuth = to.matched.some(r => r.meta.requiresAuth); + const redirectIfLoggedIn = to.matched.some(r => r.meta.redirectIfLoggedIn); + + let loggedIn = false; + try { + loggedIn = await checkIfLoggedIn(); + } catch { + + } + + if (requiresAuth && !loggedIn) { + return next({ name: 'login', query: { error: 'You must be logged in' } }); + } + + if (redirectIfLoggedIn && loggedIn) { + return next({ name: 'home' }); + } + + next(); +}); + +export default router; diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue new file mode 100644 index 0000000..4a6c083 --- /dev/null +++ b/frontend/src/views/HomeView.vue @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue new file mode 100644 index 0000000..99df7d7 --- /dev/null +++ b/frontend/src/views/LoginView.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/frontend/src/views/RegisterView.vue b/frontend/src/views/RegisterView.vue new file mode 100644 index 0000000..e8528e8 --- /dev/null +++ b/frontend/src/views/RegisterView.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue new file mode 100644 index 0000000..0e64778 --- /dev/null +++ b/frontend/src/views/SettingsView.vue @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..5175906 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + './src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}' + ], + theme: { + extend: {}, + }, + plugins: [require('tailwindcss-primeui')], +} + diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..913b8f2 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..66b5e57 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..4c399c2 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,18 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..31a1cde --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,29 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import vueDevTools from 'vite-plugin-vue-devtools' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueDevTools(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, + server: { + proxy: { + '^/api': { + target: 'http://localhost:5118', + changeOrigin: true, + cookiePathRewrite: { + "*": "/", + } + } + } + } +}) diff --git a/index.js b/index.js new file mode 100644 index 0000000..ae53056 --- /dev/null +++ b/index.js @@ -0,0 +1,26 @@ +require('dotenv').config(); + +const express = require('express'); +const cors = require('cors'); +const connectDB = require('./db/db'); + +const PORT = 3000; +const app = express(); + +connectDB(); + +app.use(express.json()); +app.use(cors({ + origin: "http://localhost:5173", + credentials: true, + allowedHeaders: ["Content-Type", "Authorization"] +})); + +app.use('/api/user', require('./controllers/auth.controller')); +app.use('/api/file', require('./controllers/file.controller')); +app.use('/f', require('./controllers/serve.controller')); + +// Start server +app.listen(PORT, () => { + console.log(`Server running at http://localhost:${PORT}`); +}); \ No newline at end of file diff --git a/middleware/auth.js b/middleware/auth.js new file mode 100644 index 0000000..be6f970 --- /dev/null +++ b/middleware/auth.js @@ -0,0 +1,28 @@ +const jwt = require('jsonwebtoken'); +const UserService = require('../services/userService'); + +const SECRET = process.env.JWT_SECRET; + +function generateToken(user) { + return jwt.sign({ id: user._id, username: user.username }, SECRET, { expiresIn: '1d' }); +} + +function authMiddleware(req, res, next) { + const token = req.headers.authorization?.split(' ')[1]; + if (!token) return res.sendStatus(401); + + try { + const decoded = jwt.verify(token, SECRET); + req.user = decoded; + next(); + } catch (err) { + return res.sendStatus(403); + } +} + +async function getActiveUser(req) { + if (!req.user?.username) return null; + return await UserService.getUserByUsername(req.user.username); +} + +module.exports = { generateToken, authMiddleware, getActiveUser }; diff --git a/models/Upload.js b/models/Upload.js new file mode 100644 index 0000000..9d7d573 --- /dev/null +++ b/models/Upload.js @@ -0,0 +1,29 @@ +const mongoose = require('mongoose'); + +const uploadSchema = new mongoose.Schema({ + filename: { + type: String, + required: true, + unique: true + }, + originalFilename: { + type: String, + required: true + }, + sizeInBytes: { + type: Number, + required: true + }, + timeOfUpload: { + type: Date, + required: true, + default: Date.now + }, + author: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + required: true + } +}); + +module.exports = mongoose.model('Upload', uploadSchema); diff --git a/models/User.js b/models/User.js new file mode 100644 index 0000000..7be9c22 --- /dev/null +++ b/models/User.js @@ -0,0 +1,15 @@ +const mongoose = require('mongoose'); + +const userSchema = new mongoose.Schema({ + username: { + type: String, + required: true, + unique: true + }, + passwordHash: { + type: String, + required: true + } +}); + +module.exports = mongoose.model('User', userSchema); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..cc0aa75 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1652 @@ +{ + "name": "mizuki-express", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mizuki-express", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "argon2": "^0.43.0", + "cors": "^2.8.5", + "dotenv": "^16.5.0", + "express": "^5.1.0", + "joi": "^17.13.3", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.15.1", + "multer": "^2.0.0" + }, + "devDependencies": { + "nodemon": "^3.1.10" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.2.2.tgz", + "integrity": "sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@phc/format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", + "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/argon2": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.43.0.tgz", + "integrity": "sha512-u/HKLcbWShVDhkfwI4hWyiUf3qyX8QhTfaIv2cWE18uqhXCmR5hb6Ed7oqYi2KCQegeAnRhiFzbjzm7i5yl1GA==", + "hasInstallScript": true, + "dependencies": { + "@phc/format": "^1.0.0", + "node-addon-api": "^8.3.1", + "node-gyp-build": "^4.8.4" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "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==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "engines": { + "node": ">=6.6.0" + } + }, + "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==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "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==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "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==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mongodb": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.16.0.tgz", + "integrity": "sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.3", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.15.1.tgz", + "integrity": "sha512-RhQ4DzmBi5BNGcS0w4u1vdMRIKcteXTCNzDt1j7XRcdWYBz1MjMjulBhPaeC5jBCHOD1yinuOFTTSOWLLGexWw==", + "dependencies": { + "bson": "^6.10.3", + "kareem": "2.6.3", + "mongodb": "~6.16.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "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==" + }, + "node_modules/multer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.0.tgz", + "integrity": "sha512-bS8rPZurbAuHGAnApbM9d4h1wSoYqrOqkE+6a64KLMK9yWU7gJXBDDVklKQ3TPi9DRb85cRs6yXaC0+cjxRtRg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/multer/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.1.tgz", + "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nodemon": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==" + }, + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "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/readable-stream/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==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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==", + "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==", + "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==", + "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==", + "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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/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==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "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==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..25cf944 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "mizuki-express", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "nodemon index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "argon2": "^0.43.0", + "cors": "^2.8.5", + "dotenv": "^16.5.0", + "express": "^5.1.0", + "joi": "^17.13.3", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.15.1", + "multer": "^2.0.0" + }, + "devDependencies": { + "nodemon": "^3.1.10" + } +} diff --git a/services/driveService.js b/services/driveService.js new file mode 100644 index 0000000..23ba3a6 --- /dev/null +++ b/services/driveService.js @@ -0,0 +1,28 @@ +const fs = require('fs'); +const path = require('path'); + +const UPLOADS_FOLDER = './uploads'; + +if (!fs.existsSync(UPLOADS_FOLDER)) { + fs.mkdirSync(UPLOADS_FOLDER); +} + +function saveFile(filename, stream) { + const targetPath = path.join(UPLOADS_FOLDER, path.basename(filename)); + const writeStream = fs.createWriteStream(targetPath); + stream.pipe(writeStream); +} + +function deleteFile(filename) { + const targetPath = path.join(UPLOADS_FOLDER, path.basename(filename)); + if (fs.existsSync(targetPath)) { + fs.unlinkSync(targetPath); + } +} + +function openFile(filename) { + const targetPath = path.join(UPLOADS_FOLDER, path.basename(filename)); + return fs.existsSync(targetPath) ? fs.createReadStream(targetPath) : null; +} + +module.exports = { saveFile, deleteFile, openFile }; diff --git a/services/uploadService.js b/services/uploadService.js new file mode 100644 index 0000000..3632b97 --- /dev/null +++ b/services/uploadService.js @@ -0,0 +1,54 @@ +const Upload = require('../models/Upload'); +const drive = require('./driveService'); +const { randomUUID } = require('crypto'); +const { Readable } = require('stream'); + +async function createUpload(user, file) { + const filename = randomUUID(); + const upload = new Upload({ + filename, + originalFilename: file.originalname, + sizeInBytes: file.size, + timeOfUpload: new Date(), + author: user._id + }); + + await upload.save(); + const stream = Readable.from(file.buffer); + drive.saveFile(filename, stream); + + return upload; +} + +async function deleteUpload(user, filename) { + const upload = await Upload.findOne({ filename, author: user._id }); + if (!upload) return; + await upload.deleteOne(); + drive.deleteFile(filename); +} + +async function getUserUploads(user) { + return await Upload.find({ author: user._id }).sort({ timeOfUpload: -1 }); +} + +async function getUploadByFilename(filename) { + return await Upload.findOne({ filename }); +} + +async function renameUpload(user, oldFilename, newFilename) { + const upload = await Upload.findOne({ filename: oldFilename, author: user._id }); + if (!upload) return false; + + upload.originalFilename = newFilename; + await upload.save(); + + return true; +} + +module.exports = { + createUpload, + deleteUpload, + getUserUploads, + getUploadByFilename, + renameUpload +}; diff --git a/services/userService.js b/services/userService.js new file mode 100644 index 0000000..3906743 --- /dev/null +++ b/services/userService.js @@ -0,0 +1,36 @@ +const User = require('../models/User'); +const argon2 = require('argon2'); + +async function usernameTaken(username) { + return await User.exists({ username }); +} + +async function getUserByUsername(username) { + return await User.findOne({ username }); +} + +async function checkPassword(username, password) { + const user = await User.findOne({ username }); + if (!user) return false; + return await argon2.verify(user.passwordHash, password); +} + +async function createUser(username, password) { + if (await usernameTaken(username)) return null; + const hash = await argon2.hash(password); + const newUser = new User({ username, passwordHash: hash }); + return await newUser.save(); +} + +async function updatePassword(userId, newPassword) { + const hash = await argon2.hash(newPassword); + return await User.findByIdAndUpdate(userId, { passwordHash: hash }); +} + +module.exports = { + usernameTaken, + getUserByUsername, + checkPassword, + createUser, + updatePassword +}; diff --git a/validators/login.validator.js b/validators/login.validator.js new file mode 100644 index 0000000..10ed513 --- /dev/null +++ b/validators/login.validator.js @@ -0,0 +1,11 @@ +const Joi = require('joi'); + +const loginSchema = Joi.object({ + username: Joi.string().regex(/^[a-zA-Z0-9_.]*$/).required(), + password: Joi.string() + .min(8) + .pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&*!]).+$/) + .required() +}); + +module.exports = { loginSchema }; \ No newline at end of file diff --git a/validators/password.validator.js b/validators/password.validator.js new file mode 100644 index 0000000..78c9863 --- /dev/null +++ b/validators/password.validator.js @@ -0,0 +1,11 @@ +const Joi = require('joi'); + +const passwordChangeSchema = Joi.object({ + oldPassword: Joi.string().min(8).required(), + newPassword: Joi.string() + .min(8) + .pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@#$%^&*!]).+$/) + .required() +}); + +module.exports = { passwordChangeSchema }; diff --git a/validators/upload.validator.js b/validators/upload.validator.js new file mode 100644 index 0000000..5260e47 --- /dev/null +++ b/validators/upload.validator.js @@ -0,0 +1,12 @@ +function validateFile(file) { + const MAX_SIZE = 50 * 1024 * 1024; // 50MiB + const filenameRegex = /^(?!\s)(?!.*\s$)[^<>:"/\\|?*\x00-\x1F]+\.(?!\.)[^<>:"/\\|?*\x00-\x1F]{1,4}$|^(?!\s)(?!.*\s$)[^<>:"/\\|?*\x00-\x1F]+$/; + + if (!file) return { valid: false, reason: 'No file provided' }; + if (file.size > MAX_SIZE) return { valid: false, reason: 'The file is too big. (Max is 50MiB)' }; + if (!filenameRegex.test(file.originalname)) return { valid: false, reason: 'Invalid filename.' }; + + return { valid: true }; +} + +module.exports = { validateFile }; \ No newline at end of file