🔧 fix eslint config

This commit is contained in:
chaoszhu 2024-07-17 12:19:59 +08:00
parent 62478abf95
commit 908558915d
30 changed files with 581 additions and 336 deletions

View File

@ -23,7 +23,7 @@ const updateGroupList = async ({ res, request }) => {
let groupList = await readGroupList()
let idx = groupList.findIndex(item => item.id === id)
let group = { id, name, index: Number(index) || 0 }
if (idx === -1) return res.fail({ data: false, msg: `分组ID${id}不存在` })
if (idx === -1) return res.fail({ data: false, msg: `分组ID${ id }不存在` })
groupList.splice(idx, 1, group)
await writeGroupList(groupList)
res.success({ data: '修改成功' })

View File

@ -11,7 +11,7 @@ async function saveHost({ res, request }) {
console.log(request)
if (!newHost || !name) return res.fail({ msg: 'missing params: name or host' })
let hostList = await readHostList()
if (hostList?.some(({ host }) => host === newHost)) return res.fail({ msg: `主机${newHost}已存在` })
if (hostList?.some(({ host }) => host === newHost)) return res.fail({ msg: `主机${ newHost }已存在` })
if (!Array.isArray(hostList)) hostList = []
hostList.push({ host: newHost, name, expired, expiredNotify, group, consoleUrl, remark })
await writeHostList(hostList)
@ -22,7 +22,7 @@ async function updateHost({ res, request }) {
let { body: { host: newHost, name: newName, oldHost, expired, expiredNotify, group, consoleUrl, remark } } = request
if (!newHost || !newName || !oldHost) return res.fail({ msg: '参数错误' })
let hostList = await readHostList()
if (!hostList.some(({ host }) => host === oldHost)) return res.fail({ msg: `主机${newHost}不存在` })
if (!hostList.some(({ host }) => host === oldHost)) return res.fail({ msg: `主机${ newHost }不存在` })
let targetIdx = hostList.findIndex(({ host }) => host === oldHost)
hostList.splice(targetIdx, 1, { name: newName, host: newHost, expired, expiredNotify, group, consoleUrl, remark })
writeHostList(hostList)
@ -33,7 +33,7 @@ async function removeHost({ res, request }) {
let { body: { host } } = request
let hostList = await readHostList()
let hostIdx = hostList.findIndex(item => item.host === host)
if (hostIdx === -1) return res.fail({ msg: `${host}不存在` })
if (hostIdx === -1) return res.fail({ msg: `${ host }不存在` })
hostList.splice(hostIdx, 1)
writeHostList(hostList)
// 查询是否存在ssh记录
@ -43,7 +43,7 @@ async function removeHost({ res, request }) {
if (flag) sshRecord.splice(sshIdx, 1)
writeSSHRecord(sshRecord)
res.success({ data: `${host}已移除, ${flag ? '并移除ssh记录' : ''}` })
res.success({ data: `${ host }已移除, ${ flag ? '并移除ssh记录' : '' }` })
}
async function updateHostSort({ res, request }) {
@ -55,7 +55,7 @@ async function updateHostSort({ res, request }) {
for (let i = 0; i < list.length; i++) {
const curHost = list[i]
let temp = hostList.find(({ host }) => curHost.host === host)
if (!temp) return res.fail({ msg: `查找失败: ${curHost.name}` })
if (!temp) return res.fail({ msg: `查找失败: ${ curHost.name }` })
sortResult.push(temp)
}
writeHostList(sortResult)

View File

@ -1,5 +1,3 @@
const Datastore = require('@seald-io/nedb')
const { resolvePath } = require('./utils/tools')
const { writeKey, writeNotifyList, writeGroupList } = require('./utils/storage')
const { KeyDB, NotifyDB, GroupDB, EmailNotifyDB } = require('./utils/db-class')
@ -14,10 +12,10 @@ function initKeyDB() {
if (count === 0) {
consola.log('初始化keyDB✔')
const defaultData = {
pwd: "admin",
commonKey: "",
publicKey: "",
privateKey: ""
pwd: 'admin',
commonKey: '',
publicKey: '',
privateKey: ''
}
await writeKey(defaultData)
}
@ -38,24 +36,24 @@ function initNotifyDB() {
if (count === 0) {
consola.log('初始化notifyDB✔')
const defaultData = [{
"type": "login",
"desc": "登录面板提醒",
"sw": true
'type': 'login',
'desc': '登录面板提醒',
'sw': true
},
{
"type": "err_login",
"desc": "登录错误提醒(连续5次)",
"sw": true
'type': 'err_login',
'desc': '登录错误提醒(连续5次)',
'sw': true
},
{
"type": "updatePwd",
"desc": "修改密码提醒",
"sw": true
'type': 'updatePwd',
'desc': '修改密码提醒',
'sw': true
},
{
"type": "host_offline",
"desc": "客户端离线提醒(每小时最多发送一次提醒)",
"sw": true
'type': 'host_offline',
'desc': '客户端离线提醒(每小时最多发送一次提醒)',
'sw': true
}]
await writeNotifyList(defaultData)
}
@ -76,7 +74,7 @@ function initGroupDB() {
} else {
if (count === 0) {
consola.log('初始化groupDB✔')
const defaultData = [{ "id": "default", "name": "默认分组", "index": 0 }]
const defaultData = [{ 'id': 'default', 'name': '默认分组', 'index': 0 }]
await writeGroupList(defaultData)
}
}
@ -96,39 +94,39 @@ function initEmailNotifyDB() {
if (count === 0) {
consola.log('初始化emailNotifyDB✔')
const defaultData = {
"support": [
'support': [
{
"name": "QQ邮箱",
"target": "qq",
"host": "smtp.qq.com",
"port": 465,
"secure": true,
"tls": {
"rejectUnauthorized": false
'name': 'QQ邮箱',
'target': 'qq',
'host': 'smtp.qq.com',
'port': 465,
'secure': true,
'tls': {
'rejectUnauthorized': false
}
},
{
"name": "网易126",
"target": "wangyi126",
"host": "smtp.126.com",
"port": 465,
"secure": true,
"tls": {
"rejectUnauthorized": false
'name': '网易126',
'target': 'wangyi126',
'host': 'smtp.126.com',
'port': 465,
'secure': true,
'tls': {
'rejectUnauthorized': false
}
},
{
"name": "网易163",
"target": "wangyi163",
"host": "smtp.163.com",
"port": 465,
"secure": true,
"tls": {
"rejectUnauthorized": false
'name': '网易163',
'target': 'wangyi163',
'host': 'smtp.163.com',
'port': 465,
'secure': true,
'tls': {
'rejectUnauthorized': false
}
}
],
"user": [
'user': [
]
}
emailNotifyDB.update({}, { $set: defaultData }, { upsert: true }, (err, numReplaced) => {

View File

@ -4,6 +4,7 @@ const { getNetIPInfo, readHostList, writeHostList, readKey, writeKey, randomStr,
const isDev = !isProd()
// 存储本机IP, 供host列表接口调用
// eslint-disable-next-line no-unused-vars
async function initLocalIp() {
if(isDev) return consola.info('非生产环境不初始化保存本地IP')
const localNetIPInfo = await getNetIPInfo()
@ -20,7 +21,7 @@ async function initRsa() {
let keyObj = await readKey()
if(keyObj.privateKey && keyObj.publicKey) return consola.info('公私钥已存在[重新生成会导致已保存的ssh密钥信息失效]')
let key = new NodeRSA({ b: 1024 })
key.setOptions({ encryptionScheme: 'pkcs1', environment: "browser" })
key.setOptions({ encryptionScheme: 'pkcs1', environment: 'browser' })
let privateKey = key.exportKey('pkcs1-private-pem')
let publicKey = key.exportKey('pkcs8-public-pem')
keyObj.privateKey = await AESEncryptSync(privateKey) // 加密私钥

View File

@ -1,7 +1,7 @@
const schedule = require('node-schedule')
const { readHostList, sendEmailToConfList, formatTimestamp } = require('../utils')
const expiredNotifyJob = () => {
const expiredNotifyJob = async () => {
consola.info('=====开始检测服务器到期时间=====', new Date())
const hostList = await readHostList()
for (const item of hostList) {

View File

@ -51,7 +51,7 @@ module.exports = (httpServer) => {
}
const sshRecord = await readSSHRecord()
let loginInfo = sshRecord.find(item => item.host === ip)
if (!sshRecord.some(item => item.host === ip)) return socket.emit('create_fail', `未找到【${ip}】凭证`)
if (!sshRecord.some(item => item.host === ip)) return socket.emit('create_fail', `未找到【${ ip }】凭证`)
let { type, host, port, username, randomKey } = loginInfo
try {
// 解密放到try里面防止报错【公私钥必须配对, 否则需要重新添加服务器密钥】
@ -64,7 +64,7 @@ module.exports = (httpServer) => {
sshClient
.on('ready', () => {
consola.success('已连接到终端:', host)
socket.emit('connect_success', `已连接到终端:${host}`)
socket.emit('connect_success', `已连接到终端:${ host }`)
createTerminal(socket, sshClient)
})
.on('error', (err) => {
@ -73,7 +73,7 @@ module.exports = (httpServer) => {
socket.emit('connect_fail', err.message)
})
.connect({
...authInfo,
...authInfo
// debug: (info) => console.log(info)
})
} catch (err) {

View File

@ -9,7 +9,7 @@ const RSADecryptSync = async (ciphertext) => {
let { privateKey } = await readKey()
privateKey = await AESDecryptSync(privateKey) // 先解密私钥
const rsakey = new NodeRSA(privateKey)
rsakey.setOptions({ encryptionScheme: 'pkcs1', environment: "browser" }) // Must Set It When Frontend Use jsencrypt
rsakey.setOptions({ encryptionScheme: 'pkcs1', environment: 'browser' }) // Must Set It When Frontend Use jsencrypt
const plaintext = rsakey.decrypt(ciphertext, 'utf8')
return plaintext
}

View File

@ -1,5 +1,3 @@
const fs = require('fs')
const { sshRecordDBPath, hostListDBPath, keyDBPath, emailNotifyDBPath, notifyConfDBPath, groupConfDBPath } = require('../config')
const { KeyDB, HostListDB, SshRecordDB, NotifyDB, GroupDB, EmailNotifyDB } = require('./db-class')
const readKey = async () => {
@ -46,7 +44,7 @@ const readSSHRecord = async () => {
const writeSSHRecord = async (record = []) => {
return new Promise((resolve, reject) => {
const sshRecordDB = new SshRecordDB().getInstance()
sshRecordDB.remove({}, { multi: true }, (err, numRemoved) => {
sshRecordDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空SSHRecord出错:', err)
reject(err)
@ -82,7 +80,7 @@ const readHostList = async () => {
const writeHostList = async (record = []) => {
return new Promise((resolve, reject) => {
const hostListDB = new HostListDB().getInstance()
hostListDB.remove({}, { multi: true }, (err, numRemoved) => {
hostListDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空HostList出错:', err)
reject(err)
@ -91,7 +89,7 @@ const writeHostList = async (record = []) => {
hostListDB.insert(record, (err, newDocs) => {
if (err) {
consola.error('写入新的HostList出错:', err)
reject(err);
reject(err)
} else {
hostListDB.compactDatafile()
resolve(newDocs)
@ -117,10 +115,11 @@ const readEmailNotifyConf = () => {
}
const writeUserEmailList = (user) => {
const emailNotifyDB = new EmailNotifyDB().getInstance()
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
let support = await readSupportEmailList()
const emailConf = { support, user }
emailNotifyDB.update({}, { $set: emailConf }, { upsert: true }, (err, numReplaced) => {
emailNotifyDB.update({}, { $set: emailConf }, { upsert: true }, (err) => {
if (err) {
reject({ code: -1, msg: err.message || err })
} else {
@ -151,7 +150,6 @@ const readUserEmailList = async () => {
return user
}
const getNotifySwByType = async (type) => {
if (!type) throw Error('missing params: type')
try {
@ -159,7 +157,7 @@ const getNotifySwByType = async (type) => {
let { sw } = notifyList.find((item) => item.type === type)
return sw
} catch (error) {
consola.error(`通知类型[${type}]不存在`)
consola.error(`通知类型[${ type }]不存在`)
return false
}
}
@ -181,18 +179,18 @@ const readNotifyList = async () => {
const writeNotifyList = async (notifyList) => {
return new Promise((resolve, reject) => {
const notifyDB = new NotifyDB().getInstance()
notifyDB.remove({}, { multi: true }, (err, numRemoved) => {
notifyDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空notify list出错:', err);
reject(err);
consola.error('清空notify list出错:', err)
reject(err)
} else {
notifyDB.insert(notifyList, (err, newDocs) => {
if (err) {
consola.error('写入新的notify list出错:', err);
consola.error('写入新的notify list出错:', err)
reject(err)
} else {
notifyDB.compactDatafile()
resolve(newDocs);
resolve(newDocs)
}
})
}
@ -217,7 +215,7 @@ const readGroupList = async () => {
const writeGroupList = async (list = []) => {
return new Promise((resolve, reject) => {
const groupDB = new GroupDB().getInstance()
groupDB.remove({}, { multi: true }, (err, numRemoved) => {
groupDB.remove({}, { multi: true }, (err) => {
if (err) {
consola.error('清空group list出错:', err)
reject(err)

View File

@ -1,4 +1,3 @@
const fs = require('fs')
const net = require('net')
const axios = require('axios')
const request = axios.create({ timeout: 3000 })
@ -104,8 +103,8 @@ function isLocalIP(ip) {
const localIPv6Ranges = [
'::1', // Loopback
'fc00::', // Unique local address
'fd00::' // Unique local address
];
'fd00::' // Unique local address
]
function isInRange(ip, start, end) {
const ipNum = ipToNumber(ip)

View File

@ -14,7 +14,9 @@
"start": "node ./app/index.js",
"pkgwin": "pkg . -t node20-win-x64",
"pkglinux:x86": "pkg . -t node20-linux-x64",
"pkglinux:arm": "pkg . -t node20-linux-arm64"
"pkglinux:arm": "pkg . -t node20-linux-arm64",
"lint": "eslint . --ext .js,.vue",
"lint:fix": "eslint . --ext .js,.jsx,.cjs,.mjs --fix"
},
"keywords": [],
"author": "",
@ -54,7 +56,7 @@
"ssh2-sftp-client": "^10.0.3"
},
"devDependencies": {
"eslint": "^9.6.0",
"eslint": "^8.56.0",
"nodemon": "^3.1.4",
"pkg": "5.8"
}

View File

@ -7,7 +7,8 @@
"dev": "vite",
"build": "vite build",
"preview": "vite preview --port 5050",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
"lint": "eslint . --ext .js,.vue",
"lint:fix": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
},
"dependencies": {
"@codemirror/lang-cpp": "^6.0.2",
@ -43,7 +44,7 @@
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.5",
"@vitejs/plugin-vue-jsx": "^4.0.0",
"eslint": "^9.6.0",
"eslint": "^8.56.0",
"eslint-plugin-vue": "^9.27.0",
"sass": "^1.77.7",
"unplugin-auto-import": "^0.17.6",

View File

@ -1,13 +1,25 @@
<template>
<el-dialog v-model="visible" width="800px" :top="'20vh'" :close-on-click-modal="false" :close-on-press-escape="false"
:show-close="false" center custom-class="container">
<el-dialog
v-model="visible"
width="800px"
:top="'20vh'"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="false"
center
custom-class="container"
>
<template #header>
<div class="title">
输入多行命令发送到终端执行
</div>
</template>
<el-input v-model="command" :autosize="{ minRows: 10, maxRows: 20 }" type="textarea"
placeholder="Please input command" />
<el-input
v-model="command"
:autosize="{ minRows: 10, maxRows: 20 }"
type="textarea"
placeholder="Please input command"
/>
<template #footer>
<footer>
<div class="btns">
@ -28,7 +40,7 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:show', 'closed', 'input-command'])
const emit = defineEmits(['update:show', 'closed', 'input-command',])
const command = ref('')
@ -46,7 +58,6 @@ const handleSave = () => {
}
</script>
<style lang="scss" scoped></style>
<style lang="scss">

View File

@ -3,7 +3,7 @@
<use :xlink:href="href" />
</svg>
</template>
<script >
<script>
export default {
name: 'IconSvg',
props: {

View File

@ -29,7 +29,7 @@ const useStore = defineStore({
setTimeout(() => {
this.hostList.forEach((item) => {
const { host } = item
ping(`http://${ host }:${this.$clientPort}`)
ping(`http://${ host }:${ this.$clientPort }`)
.then((res) => {
item.ping = res
})

View File

@ -8,7 +8,7 @@ function request_image(url) {
}
function ping(url, timeout = 5000) {
return new Promise((resolve, reject) => {
return new Promise((resolve) => {
let start = Date.now()
let response = () => {
let delay = (Date.now() - start) + 'ms'

View File

@ -166,11 +166,11 @@ const props = defineProps({
},
hiddenIp: {
required: true,
type: [Number, Boolean]
type: [Number, Boolean,]
}
})
const emit = defineEmits(['update-list', 'update-host'])
const emit = defineEmits(['update-list', 'update-host',])
const sshFormVisible = ref(false)
const tempHost = ref('')
@ -218,7 +218,7 @@ const handleToConsole = () => {
const handleSSH = async () => {
let { data } = await $api.existSSH(host.value)
if (data) return window.open(`/terminal?host=${host.value}&name=${name.value}`)
if (data) return window.open(`/terminal?host=${ host.value }&name=${ name.value }`)
if (!host.value) {
return ElMessage({
message: '请等待获取服务器ip或刷新页面重试',

View File

@ -119,7 +119,7 @@ const props = defineProps({
default: null
}
})
const emit = defineEmits(['update:show', 'update-list', 'closed'])
const emit = defineEmits(['update:show', 'update-list', 'closed',])
const resetForm = () => ({
group: 'default',

View File

@ -143,7 +143,7 @@ const pushTestEmail = (row) => {
const { email: toEmail } = row
$api.pushTestEmail({ isTest: true, toEmail })
.then(() => {
$message.success(`发送成功, 请检查邮箱: ${toEmail}`)
$message.success(`发送成功, 请检查邮箱: ${ toEmail }`)
})
.catch((error) => {
$notification({
@ -159,7 +159,7 @@ const pushTestEmail = (row) => {
const deleteUserEmail = ({ email }) => {
$messageBox.confirm(
`确认删除邮箱:${email}`,
`确认删除邮箱:${ email }`,
'Warning',
{
confirmButtonText: '确定',

View File

@ -209,7 +209,7 @@ const updateGroup = () => {
}
const deleteGroup = ({ id, name }) => {
$messageBox.confirm(`确认删除分组:${name}`, 'Warning', {
$messageBox.confirm(`确认删除分组:${ name }`, 'Warning', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'

View File

@ -24,7 +24,7 @@
import { ref, onMounted } from 'vue'
import { getCurrentInstance } from 'vue'
const { proxy: { $api, $message } } = getCurrentInstance()
const { proxy: { $api } } = getCurrentInstance()
const notifyListLoading = ref(false)
const notifyList = ref([])

View File

@ -29,7 +29,7 @@
<script setup>
import { ref, onMounted, getCurrentInstance } from 'vue'
const emit = defineEmits(['update-list'])
const emit = defineEmits(['update-list',])
const { proxy: { $api, $message, $store } } = getCurrentInstance()
const targetIndex = ref(0)

View File

@ -45,7 +45,7 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:show', 'update-list'])
const emit = defineEmits(['update:show', 'update-list',])
const visible = computed({
get: () => props.show,

View File

@ -93,7 +93,7 @@
<script setup>
import { ref, reactive, computed, watch, getCurrentInstance, nextTick } from 'vue'
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import { ElNotification } from 'element-plus'
import { randomStr, AESEncrypt, RSAEncrypt } from '@utils/index.js'
const props = defineProps({
@ -111,7 +111,7 @@ const props = defineProps({
}
})
const emit = defineEmits(['update:show'])
const emit = defineEmits(['update:show',])
const formRef = ref(null)
const privateKeyRef = ref(null)
@ -140,7 +140,7 @@ const rules = reactive({
command: { required: false }
})
const { proxy: { $api, $tools } } = getCurrentInstance()
const { proxy: { $api } } = getCurrentInstance()
const visible = computed({
get() {

View File

@ -46,13 +46,13 @@
</template>
<script setup>
import { ref, reactive, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
import { ref, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
import { io } from 'socket.io-client'
import HostForm from './components/host-form.vue'
import Setting from './components/setting.vue'
import HostCard from './components/host-card.vue'
const { proxy: { $store, $api, $message, $notification, $router, $serviceURI } } = getCurrentInstance()
const { proxy: { $store, $message, $notification, $router, $serviceURI } } = getCurrentInstance()
const socket = ref(null)
const loading = ref(true)

View File

@ -1,6 +1,14 @@
<template>
<el-dialog v-model="visible" width="500px" :top="'30vh'" destroy-on-close :close-on-click-modal="false"
:close-on-press-escape="false" :show-close="false" center>
<el-dialog
v-model="visible"
width="500px"
:top="'30vh'"
destroy-on-close
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="false"
center
>
<template #header>
<h2 v-if="notKey" style="color: #f56c6c;"> Error </h2>
<h2 v-else style="color: #409eff;"> LOGIN </h2>
@ -9,11 +17,25 @@
<el-alert title="Error: 用于加密的公钥获取失败,请尝试重新启动或部署服务" type="error" show-icon />
</div>
<div v-else>
<el-form ref="loginFormRefs" :model="loginForm" :rules="rules" :hide-required-asterisk="true" label-suffix=""
label-width="90px">
<el-form
ref="loginFormRefs"
:model="loginForm"
:rules="rules"
:hide-required-asterisk="true"
label-suffix=""
label-width="90px"
>
<el-form-item prop="pwd" label="密码">
<el-input v-model.trim="loginForm.pwd" type="password" placeholder="Please input password" autocomplete="off"
:trigger-on-focus="false" clearable show-password @keyup.enter="handleLogin" />
<el-input
v-model.trim="loginForm.pwd"
type="password"
placeholder="Please input password"
autocomplete="off"
:trigger-on-focus="false"
clearable
show-password
@keyup.enter="handleLogin"
/>
</el-form-item>
<el-form-item v-show="false" prop="pwd" label="密码">
<el-input v-model.trim="loginForm.pwd" />
@ -22,8 +44,17 @@
<el-radio-group v-model="isSession" class="login-indate">
<el-radio :value="true">一次性会话</el-radio>
<el-radio :value="false">自定义(小时)</el-radio>
<el-input-number v-model="loginForm.jwtExpires" :disabled="isSession" placeholder="单位:小时" class="input"
:min="1" :max="72" value-on-clear="min" size="small" controls-position="right" />
<el-input-number
v-model="loginForm.jwtExpires"
:disabled="isSession"
placeholder="单位:小时"
class="input"
:min="1"
:max="72"
value-on-clear="min"
size="small"
controls-position="right"
/>
</el-radio-group>
</el-form-item>
</el-form>
@ -52,15 +83,15 @@ const notKey = ref(false)
const loading = ref(false)
const loginForm = reactive({
pwd: '',
jwtExpires: 8,
jwtExpires: 8
})
const rules = reactive({
pwd: { required: true, message: '需输入密码', trigger: 'change' },
pwd: { required: true, message: '需输入密码', trigger: 'change' }
})
const handleLogin = () => {
loginFormRefs.value.validate().then(() => {
let jwtExpires = isSession.value ? '12h' : `${loginForm.jwtExpires}h`
let jwtExpires = isSession.value ? '12h' : `${ loginForm.jwtExpires }h`
if (!isSession.value) {
localStorage.setItem('jwtExpires', loginForm.jwtExpires)
}

View File

@ -12,7 +12,12 @@
</div> -->
</header>
<el-divider class="first-divider" content-position="center">POSITION</el-divider>
<el-descriptions class="margin-top" :column="1" size="small" border>
<el-descriptions
class="margin-top"
:column="1"
size="small"
border
>
<el-descriptions-item>
<template #label>
<div class="item-title">
@ -43,14 +48,24 @@
</el-descriptions>
<el-divider content-position="center">INDICATOR</el-divider>
<el-descriptions class="margin-top" :column="1" size="small" border>
<el-descriptions
class="margin-top"
:column="1"
size="small"
border
>
<el-descriptions-item>
<template #label>
<div class="item-title">
CPU
</div>
</template>
<el-progress :text-inside="true" :stroke-width="18" :percentage="cpuUsage" :color="handleColor(cpuUsage)" />
<el-progress
:text-inside="true"
:stroke-width="18"
:percentage="cpuUsage"
:color="handleColor(cpuUsage)"
/>
</el-descriptions-item>
<el-descriptions-item>
<template #label>
@ -58,8 +73,12 @@
内存
</div>
</template>
<el-progress :text-inside="true" :stroke-width="18" :percentage="usedMemPercentage"
:color="handleColor(usedMemPercentage)" />
<el-progress
:text-inside="true"
:stroke-width="18"
:percentage="usedMemPercentage"
:color="handleColor(usedMemPercentage)"
/>
<div class="position-right">
{{ $tools.toFixed(memInfo.usedMemMb / 1024) }}/{{ $tools.toFixed(memInfo.totalMemMb / 1024) }}G
</div>
@ -70,8 +89,12 @@
硬盘
</div>
</template>
<el-progress :text-inside="true" :stroke-width="18" :percentage="usedPercentage"
:color="handleColor(usedPercentage)" />
<el-progress
:text-inside="true"
:stroke-width="18"
:percentage="usedPercentage"
:color="handleColor(usedPercentage)"
/>
<div class="position-right">
{{ driveInfo.usedGb || '--' }}/{{ driveInfo.totalGb || '--' }}G
</div>
@ -96,7 +119,12 @@
</el-descriptions>
<el-divider content-position="center">INFORMATION</el-divider>
<el-descriptions class="margin-top" :column="1" size="small" border>
<el-descriptions
class="margin-top"
:column="1"
size="small"
border
>
<el-descriptions-item>
<template #label>
<div class="item-title">
@ -160,18 +188,24 @@
</el-descriptions>
<el-divider content-position="center">FEATURE</el-divider>
<el-button :type="sftpStatus ? 'primary' : 'success'" style="display: block;width: 80%;margin: 30px auto;"
@click="handleSftp">
<el-button
:type="sftpStatus ? 'primary' : 'success'"
style="display: block;width: 80%;margin: 30px auto;"
@click="handleSftp"
>
{{ sftpStatus ? '关闭SFTP' : '连接SFTP' }}
</el-button>
<el-button :type="inputCommandStyle ? 'primary' : 'success'" style="display: block;width: 80%;margin: 30px auto;"
@click="clickInputCommand">
<el-button
:type="inputCommandStyle ? 'primary' : 'success'"
style="display: block;width: 80%;margin: 30px auto;"
@click="clickInputCommand"
>
命令输入框
</el-button>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, onBeforeUnmount, computed, getCurrentInstance } from 'vue'
import { ref, onMounted, onBeforeUnmount, computed, getCurrentInstance } from 'vue'
import socketIo from 'socket.io-client'
const { proxy: { $router, $serviceURI, $message, $notification, $tools } } = getCurrentInstance()
@ -192,10 +226,10 @@ const props = defineProps({
showInputCommand: {
required: true,
type: Boolean
},
}
})
const emit = defineEmits(['update:inputCommandStyle', 'connect-sftp', 'click-input-command'])
const emit = defineEmits(['update:inputCommandStyle', 'connect-sftp', 'click-input-command',])
const socket = ref(null)
const name = ref('')
@ -205,7 +239,7 @@ const pingTimer = ref(null)
const sftpStatus = ref(false)
const ipInfo = computed(() => hostData.value?.ipInfo || {})
const isError = computed(() => !Boolean(hostData.value?.osInfo))
// const isError = computed(() => !Boolean(hostData.value?.osInfo))
const cpuInfo = computed(() => hostData.value?.cpuInfo || {})
const memInfo = computed(() => hostData.value?.memInfo || {})
const osInfo = computed(() => hostData.value?.osInfo || {})
@ -214,19 +248,19 @@ const netstatInfo = computed(() => {
let { total: netTotal, ...netCards } = hostData.value?.netstatInfo || {}
return { netTotal, netCards: netCards || {} }
})
const openedCount = computed(() => hostData.value?.openedCount || 0)
// const openedCount = computed(() => hostData.value?.openedCount || 0)
const cpuUsage = computed(() => Number(cpuInfo.value?.cpuUsage) || 0)
const usedMemPercentage = computed(() => Number(memInfo.value?.usedMemPercentage) || 0)
const usedPercentage = computed(() => Number(driveInfo.value?.usedPercentage) || 0)
const output = computed(() => {
let outputMb = Number(netstatInfo.value.netTotal?.outputMb) || 0
if (outputMb >= 1) return `${outputMb.toFixed(2)} MB/s`
return `${(outputMb * 1024).toFixed(1)} KB/s`
if (outputMb >= 1) return `${ outputMb.toFixed(2) } MB/s`
return `${ (outputMb * 1024).toFixed(1) } KB/s`
})
const input = computed(() => {
let inputMb = Number(netstatInfo.value.netTotal?.inputMb) || 0
if (inputMb >= 1) return `${inputMb.toFixed(2)} MB/s`
return `${(inputMb * 1024).toFixed(1)} KB/s`
if (inputMb >= 1) return `${ inputMb.toFixed(2) } MB/s`
return `${ (inputMb * 1024).toFixed(1) } KB/s`
})
const inputCommandStyle = computed({
get: () => props.showInputCommand,
@ -298,7 +332,7 @@ const handleColor = (num) => {
const getHostPing = () => {
pingTimer.value = setInterval(() => {
$tools.ping(`http://${props.host}:22022`)
$tools.ping(`http://${ props.host }:22022`)
.then(res => {
ping.value = res
if (!import.meta.env.DEV) {
@ -320,7 +354,6 @@ onBeforeUnmount(() => {
})
</script>
<style lang="scss" scoped>
.info-container {
// min-width: 250px;

View File

@ -133,7 +133,7 @@
</template>
<script setup>
import { ref, reactive, computed, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
import { ref, computed, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
import socketIo from 'socket.io-client'
import CodeEdit from '@/components/code-edit/index.vue'
import { isDir, isFile, sortDirTree, downloadFile } from '@/utils'
@ -155,7 +155,7 @@ const props = defineProps({
}
})
const emit = defineEmits(['resize'])
const emit = defineEmits(['resize',])
const { proxy: { $notification, $message, $messageBox, $serviceURI, $nextTick } } = getCurrentInstance()
@ -300,7 +300,7 @@ const openRootChild = (item) => {
openDir()
filterKey.value = ''
} else {
$message.warning(`暂不支持打开文件${name} ${type}`)
$message.warning(`暂不支持打开文件${ name } ${ type }`)
}
}
@ -317,7 +317,7 @@ const openTarget = (item) => {
const path = getPath(name)
socket.value.emit('down_file', { path, name, size, target: 'preview' })
} else {
$message.warning(`暂不支持打开文件${name} ${type}`)
$message.warning(`暂不支持打开文件${ name } ${ type }`)
}
}
@ -352,7 +352,7 @@ const handleDownload = () => {
if (curTarget.value === null) return $message.warning('先选择一个文件')
const { name, size, type } = curTarget.value
if (isDir(type)) return $message.error('暂不支持下载文件夹')
$messageBox.confirm(`确认下载:${name}`, 'Warning', {
$messageBox.confirm(`确认下载:${ name }`, 'Warning', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@ -373,7 +373,7 @@ const handleDownload = () => {
const handleDelete = () => {
if (curTarget.value === null) return $message.warning('先选择一个文件(夹)')
const { name, type } = curTarget.value
$messageBox.confirm(`确认删除:${name}`, 'Warning', {
$messageBox.confirm(`确认删除:${ name }`, 'Warning', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@ -409,7 +409,7 @@ const uploadFile = (file) => {
}
let reader = new
FileReader()
reader.onload = async (e) => {
reader.onload = async () => {
const { name } = file
const fullPath = getPath(name)
const targetPath = curPath.value
@ -436,7 +436,7 @@ const uploadFile = (file) => {
upFileProgress.value = parseInt((fileIndex / totalSliceCount * 100) / 2)
}
socket.value.emit('up_file_slice_over', { name, fullPath, range, size })
socket.value.once('up_file_success', (res) => {
socket.value.once('up_file_success', () => {
if (multipleFlag) return
handleRefresh()
resetFileStatusFlag()
@ -453,7 +453,7 @@ const uploadFile = (file) => {
})
} catch (err) {
reject(err)
const errMsg = `上传失败, ${err}`
const errMsg = `上传失败, ${ err }`
$message.error(errMsg)
handleRefresh()
resetFileStatusFlag()
@ -493,7 +493,7 @@ const openDir = () => {
}
const getPath = (name = '') => {
return curPath.value.length === 1 ? `/${name}` : `${curPath.value}/${name}`
return curPath.value.length === 1 ? `/${ name }` : `${ curPath.value }/${ name }`
}
const adjustHeight = () => {
@ -511,7 +511,7 @@ const adjustHeight = () => {
if (!startAdjust) return
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
sftpHeight = `calc(100vh - ${e.pageY}px)`
sftpHeight = `calc(100vh - ${ e.pageY }px)`
document.querySelector('.sftp-container').style.height = sftpHeight
emit('resize')
})
@ -519,7 +519,7 @@ const adjustHeight = () => {
document.addEventListener('mouseup', (e) => {
if (!startAdjust) return
startAdjust = false
sftpHeight = `calc(100vh - ${e.pageY}px)`
sftpHeight = `calc(100vh - ${ e.pageY }px)`
localStorage.setItem('sftpHeight', sftpHeight)
})
})
@ -527,7 +527,6 @@ const adjustHeight = () => {
</script>
<style lang="scss" scoped>
.sftp-container {
position: relative;

View File

@ -198,11 +198,11 @@ const onSelectionChange = () => {
term.value.onSelectionChange(() => {
let str = term.value.getSelection()
if (!str) return
const text = new Blob([str], { type: 'text/plain' })
const text = new Blob([str,], { type: 'text/plain' })
const item = new ClipboardItem({
'text/plain': text
})
navigator.clipboard.write([item])
navigator.clipboard.write([item,])
})
}
@ -251,11 +251,11 @@ onBeforeUnmount(() => {
window.removeEventListener('resize', handleResize)
})
defineExpose({
focusTab,
handleResize,
handleInputCommand,
handleClear,
tabKey
})
</script>

View File

@ -1,7 +1,14 @@
<template>
<div class="container">
<InfoSide ref="infoSideRef" :showInputCommand.sync="showInputCommand" :token="token" :host="host" :visible="visible" @connect-sftp="connectSftp"
@click-input-command="clickInputCommand" />
<InfoSide
ref="infoSideRef"
v-model:show-input-command="showInputCommand"
:token="token"
:host="host"
:visible="visible"
@connect-sftp="connectSftp"
@click-input-command="clickInputCommand"
/>
<section>
<div class="terminals">
<el-button class="full-screen-button" type="success" @click="handleFullScreen">
@ -10,11 +17,28 @@
<div class="visible" @click="handleVisibleSidebar">
<svg-icon name="icon-jiantou_zuoyouqiehuan" class="svg-icon" />
</div>
<el-tabs v-model="activeTab" type="border-card" addable tab-position="top" @tab-remove="removeTab"
@tab-change="tabChange" @tab-add="tabAdd">
<el-tab-pane v-for="item in terminalTabs" :key="item.key" :label="item.title" :name="item.key"
:closable="closable">
<TerminalTab ref="terminalTabRefs" :token="token" :host="host" :tab-key="item.key" />
<el-tabs
v-model="activeTab"
type="border-card"
addable
tab-position="top"
@tab-remove="removeTab"
@tab-change="tabChange"
@tab-add="tabAdd"
>
<el-tab-pane
v-for="item in terminalTabs"
:key="item.key"
:label="item.title"
:name="item.key"
:closable="closable"
>
<TerminalTab
ref="terminalTabRefs"
:token="token"
:host="host"
:tab-key="item.key"
/>
</el-tab-pane>
</el-tabs>
</div>
@ -27,7 +51,7 @@
</template>
<script setup>
import { ref, reactive, computed, onBeforeMount, getCurrentInstance, watch } from 'vue'
import { ref, reactive, computed, onBeforeMount, getCurrentInstance } from 'vue'
import TerminalTab from './components/terminal-tab.vue'
import InfoSide from './components/info-side.vue'
import SftpFooter from './components/sftp-footer.vue'
@ -55,7 +79,7 @@ onBeforeMount(() => {
let { host: routeHost, name: routeName } = $route.query
name.value = routeName
host.value = routeHost
document.title = `${document.title}-${routeName}`
document.title = `${ document.title }-${ routeName }`
let key = Date.now().toString()
terminalTabs.push({ title: routeName, key })
activeTab.value = key
@ -142,7 +166,7 @@ const handleInputCommand = async (command) => {
const curTabTerminal = terminalTabRefs.value.find(({ tabKey }) => activeTab.value === tabKey)
await $nextTick()
curTabTerminal?.focusTab()
curTabTerminal.handleInputCommand(`${command}\n`)
curTabTerminal.handleInputCommand(`${ command }\n`)
showInputCommand.value = false
}
</script>
@ -207,11 +231,11 @@ const handleInputCommand = async (command) => {
user-select: none;
}
.el-tabs__nav-scroll {
.el-tabs__nav {
// padding-left: 60px;
}
}
// .el-tabs__nav-scroll {
// .el-tabs__nav {
// // padding-left: 60px;
// }
// }
.el-tabs__new-tab {
position: absolute;

492
yarn.lock
View File

@ -10,7 +10,7 @@
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.24"
"@antfu/utils@^0.7.10", "@antfu/utils@^0.7.8":
"@antfu/utils@^0.7.10":
version "0.7.10"
resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.10.tgz#ae829f170158e297a9b6a28f161a8e487d00814d"
integrity sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==
@ -23,26 +23,26 @@
"@babel/highlight" "^7.24.7"
picocolors "^1.0.0"
"@babel/compat-data@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed"
integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==
"@babel/compat-data@^7.24.8":
version "7.24.9"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0"
integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==
"@babel/core@^7.24.6":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4"
integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==
version "7.24.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82"
integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.24.7"
"@babel/generator" "^7.24.7"
"@babel/helper-compilation-targets" "^7.24.7"
"@babel/helper-module-transforms" "^7.24.7"
"@babel/helpers" "^7.24.7"
"@babel/parser" "^7.24.7"
"@babel/generator" "^7.24.9"
"@babel/helper-compilation-targets" "^7.24.8"
"@babel/helper-module-transforms" "^7.24.9"
"@babel/helpers" "^7.24.8"
"@babel/parser" "^7.24.8"
"@babel/template" "^7.24.7"
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
"@babel/traverse" "^7.24.8"
"@babel/types" "^7.24.9"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@ -58,12 +58,12 @@
"@jridgewell/gen-mapping" "^0.3.0"
jsesc "^2.5.1"
"@babel/generator@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d"
integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==
"@babel/generator@^7.24.8", "@babel/generator@^7.24.9":
version "7.24.10"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76"
integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==
dependencies:
"@babel/types" "^7.24.7"
"@babel/types" "^7.24.9"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
@ -75,26 +75,26 @@
dependencies:
"@babel/types" "^7.24.7"
"@babel/helper-compilation-targets@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9"
integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==
"@babel/helper-compilation-targets@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271"
integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==
dependencies:
"@babel/compat-data" "^7.24.7"
"@babel/helper-validator-option" "^7.24.7"
browserslist "^4.22.2"
"@babel/compat-data" "^7.24.8"
"@babel/helper-validator-option" "^7.24.8"
browserslist "^4.23.1"
lru-cache "^5.1.1"
semver "^6.3.1"
"@babel/helper-create-class-features-plugin@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b"
integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==
"@babel/helper-create-class-features-plugin@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz#47f546408d13c200c0867f9d935184eaa0851b09"
integrity sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.24.7"
"@babel/helper-environment-visitor" "^7.24.7"
"@babel/helper-function-name" "^7.24.7"
"@babel/helper-member-expression-to-functions" "^7.24.7"
"@babel/helper-member-expression-to-functions" "^7.24.8"
"@babel/helper-optimise-call-expression" "^7.24.7"
"@babel/helper-replace-supers" "^7.24.7"
"@babel/helper-skip-transparent-expression-wrappers" "^7.24.7"
@ -123,13 +123,13 @@
dependencies:
"@babel/types" "^7.24.7"
"@babel/helper-member-expression-to-functions@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f"
integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==
"@babel/helper-member-expression-to-functions@^7.24.7", "@babel/helper-member-expression-to-functions@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6"
integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==
dependencies:
"@babel/traverse" "^7.24.7"
"@babel/types" "^7.24.7"
"@babel/traverse" "^7.24.8"
"@babel/types" "^7.24.8"
"@babel/helper-module-imports@^7.24.7":
version "7.24.7"
@ -146,10 +146,10 @@
dependencies:
"@babel/types" "^7.22.15"
"@babel/helper-module-transforms@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8"
integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==
"@babel/helper-module-transforms@^7.24.9":
version "7.24.9"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29"
integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==
dependencies:
"@babel/helper-environment-visitor" "^7.24.7"
"@babel/helper-module-imports" "^7.24.7"
@ -164,10 +164,10 @@
dependencies:
"@babel/types" "^7.24.7"
"@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0"
integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==
"@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878"
integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==
"@babel/helper-replace-supers@^7.24.7":
version "7.24.7"
@ -201,28 +201,28 @@
dependencies:
"@babel/types" "^7.24.7"
"@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2"
integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==
"@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d"
integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==
"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==
"@babel/helper-validator-option@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6"
integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==
"@babel/helper-validator-option@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d"
integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==
"@babel/helpers@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416"
integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==
"@babel/helpers@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873"
integrity sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==
dependencies:
"@babel/template" "^7.24.7"
"@babel/types" "^7.24.7"
"@babel/types" "^7.24.8"
"@babel/highlight@^7.24.7":
version "7.24.7"
@ -239,10 +239,10 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef"
integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==
"@babel/parser@^7.23.9", "@babel/parser@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85"
integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==
"@babel/parser@^7.23.9", "@babel/parser@^7.24.7", "@babel/parser@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f"
integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==
"@babel/plugin-syntax-jsx@^7.23.3":
version "7.24.7"
@ -259,19 +259,19 @@
"@babel/helper-plugin-utils" "^7.24.7"
"@babel/plugin-transform-typescript@^7.24.6":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881"
integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.8.tgz#c104d6286e04bf7e44b8cba1b686d41bad57eb84"
integrity sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==
dependencies:
"@babel/helper-annotate-as-pure" "^7.24.7"
"@babel/helper-create-class-features-plugin" "^7.24.7"
"@babel/helper-plugin-utils" "^7.24.7"
"@babel/helper-create-class-features-plugin" "^7.24.8"
"@babel/helper-plugin-utils" "^7.24.8"
"@babel/plugin-syntax-typescript" "^7.24.7"
"@babel/runtime@^7.21.0":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12"
integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e"
integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==
dependencies:
regenerator-runtime "^0.14.0"
@ -284,19 +284,19 @@
"@babel/parser" "^7.24.7"
"@babel/types" "^7.24.7"
"@babel/traverse@^7.23.9", "@babel/traverse@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5"
integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==
"@babel/traverse@^7.23.9", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8":
version "7.24.8"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7"
integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==
dependencies:
"@babel/code-frame" "^7.24.7"
"@babel/generator" "^7.24.7"
"@babel/generator" "^7.24.8"
"@babel/helper-environment-visitor" "^7.24.7"
"@babel/helper-function-name" "^7.24.7"
"@babel/helper-hoist-variables" "^7.24.7"
"@babel/helper-split-export-declaration" "^7.24.7"
"@babel/parser" "^7.24.7"
"@babel/types" "^7.24.7"
"@babel/parser" "^7.24.8"
"@babel/types" "^7.24.8"
debug "^4.3.1"
globals "^11.1.0"
@ -309,12 +309,12 @@
"@babel/helper-validator-identifier" "^7.18.6"
to-fast-properties "^2.0.0"
"@babel/types@^7.18.2", "@babel/types@^7.22.15", "@babel/types@^7.23.9", "@babel/types@^7.24.7":
version "7.24.7"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2"
integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==
"@babel/types@^7.18.2", "@babel/types@^7.22.15", "@babel/types@^7.23.9", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9":
version "7.24.9"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73"
integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==
dependencies:
"@babel/helper-string-parser" "^7.24.7"
"@babel/helper-string-parser" "^7.24.8"
"@babel/helper-validator-identifier" "^7.24.7"
to-fast-properties "^2.0.0"
@ -653,7 +653,7 @@
dependencies:
eslint-visitor-keys "^3.3.0"
"@eslint-community/regexpp@^4.6.1":
"@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.6.1":
version "4.11.0"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae"
integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==
@ -667,6 +667,21 @@
debug "^4.3.1"
minimatch "^3.1.2"
"@eslint/eslintrc@^2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
espree "^9.6.0"
globals "^13.19.0"
ignore "^5.2.0"
import-fresh "^3.2.1"
js-yaml "^4.1.0"
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/eslintrc@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6"
@ -682,10 +697,15 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@9.6.0":
version "9.6.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.6.0.tgz#5b0cb058cc13d9c92d4e561d3538807fa5127c95"
integrity sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==
"@eslint/js@8.57.0":
version "8.57.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
"@eslint/js@9.7.0":
version "9.7.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.7.0.tgz#b712d802582f02b11cfdf83a85040a296afec3f0"
integrity sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==
"@eslint/object-schema@^2.1.4":
version "2.1.4"
@ -717,11 +737,25 @@
resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-3.0.0.tgz#f11fdf7dda62fe8e336fa7c6642d9041f30356d7"
integrity sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==
"@humanwhocodes/config-array@^0.11.14":
version "0.11.14"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
dependencies:
"@humanwhocodes/object-schema" "^2.0.2"
debug "^4.3.1"
minimatch "^3.0.5"
"@humanwhocodes/module-importer@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
"@humanwhocodes/object-schema@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
"@humanwhocodes/retry@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570"
@ -1158,9 +1192,9 @@
"@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.182":
version "4.17.6"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.6.tgz#193ced6a40c8006cfc1ca3f4553444fb38f0e543"
integrity sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==
version "4.17.7"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612"
integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==
"@types/mime@^1":
version "1.3.5"
@ -1168,9 +1202,9 @@
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
"@types/node@*", "@types/node@>=10.0.0":
version "20.14.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a"
integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==
version "20.14.11"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b"
integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==
dependencies:
undici-types "~5.26.4"
@ -1206,6 +1240,11 @@
resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8"
integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
"@ungap/structured-clone@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
"@vitejs/plugin-vue-jsx@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.0.0.tgz#7bb65d57153ebf63b2e6ab0cc81029e82206036c"
@ -1373,7 +1412,7 @@ acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.11.3, acorn@^8.12.0, acorn@^8.9.0:
acorn@^8.11.3, acorn@^8.12.0, acorn@^8.12.1, acorn@^8.9.0:
version "8.12.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
@ -1564,7 +1603,7 @@ braces@^3.0.3, braces@~3.0.2:
dependencies:
fill-range "^7.1.1"
browserslist@^4.22.2:
browserslist@^4.23.1:
version "4.23.2"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed"
integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==
@ -1632,9 +1671,9 @@ camelcase@^6.3.0:
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001640:
version "1.0.30001641"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz#3572862cd18befae3f637f2a1101cc033c6782ac"
integrity sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==
version "1.0.30001642"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz#6aa6610eb24067c246d30c57f055a9d0a7f8d05f"
integrity sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==
chalk@^2.4.2:
version "2.4.2"
@ -2009,6 +2048,13 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
doctrine@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
dependencies:
esutils "^2.0.2"
dom-walk@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
@ -2037,14 +2083,14 @@ ee-first@1.1.1:
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
electron-to-chromium@^1.4.820:
version "1.4.824"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.824.tgz#5adbaf8f2a3466777d97384d6af27abc120bab8b"
integrity sha512-GTQnZOP1v0wCuoWzKOxL8rurg9T13QRYISkoICGaZzskBf9laC3V8g9BHTpJv+j9vBRcKOulbGXwMzuzNdVrAA==
version "1.4.828"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.828.tgz#a1ee8cd8847448b2898d3f2d9db02113f9c5b35c"
integrity sha512-QOIJiWpQJDHAVO4P58pwb133Cwee0nbvy/MV1CwzZVGpkH1RX33N3vsaWRCpR6bF63AAq366neZrRTu7Qlsbbw==
element-plus@^2.7.6:
version "2.7.6"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.7.6.tgz#09b2c9c1de46dcc6778d37a29d9c0948ce40d635"
integrity sha512-36sw1K23hYjgeooR10U6CiCaCp2wvOqwoFurADZVlekeQ9v5U1FhJCFGEXO6i/kZBBMwsE1c9fxjLs9LENw2Rg==
version "2.7.7"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-2.7.7.tgz#317a4b826d577f4572ca040f2568eb751edd891d"
integrity sha512-7ucUiDAxevyBE8JbXBTe9ofHhS047VmWMLoksE45zZ08XSnhnyG7WUuk3gmDbAklfVMHedb9sEV3OovPUWt+Sw==
dependencies:
"@ctrl/tinycolor" "^3.4.1"
"@element-plus/icons-vue" "^2.3.1"
@ -2096,9 +2142,9 @@ engine.io-client@~6.5.2:
xmlhttprequest-ssl "~2.0.0"
engine.io-parser@~5.2.1:
version "5.2.2"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49"
integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==
version "5.2.3"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f"
integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==
engine.io@~6.5.2:
version "6.5.5"
@ -2206,7 +2252,7 @@ eslint-plugin-vue@^9.27.0:
vue-eslint-parser "^9.4.3"
xml-name-validator "^4.0.0"
eslint-scope@^7.1.1:
eslint-scope@^7.1.1, eslint-scope@^7.2.2:
version "7.2.2"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
@ -2214,15 +2260,15 @@ eslint-scope@^7.1.1:
esrecurse "^4.3.0"
estraverse "^5.2.0"
eslint-scope@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc"
integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==
eslint-scope@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94"
integrity sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
@ -2232,16 +2278,60 @@ eslint-visitor-keys@^4.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb"
integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==
eslint@^9.6.0:
version "9.6.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.6.0.tgz#9f54373afa15e1ba356656a8d96233182027fb49"
integrity sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==
eslint@^8.56.0:
version "8.57.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
"@eslint/js" "8.57.0"
"@humanwhocodes/config-array" "^0.11.14"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
"@ungap/structured-clone" "^1.2.0"
ajv "^6.12.4"
chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.3.2"
doctrine "^3.0.0"
escape-string-regexp "^4.0.0"
eslint-scope "^7.2.2"
eslint-visitor-keys "^3.4.3"
espree "^9.6.1"
esquery "^1.4.2"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
file-entry-cache "^6.0.1"
find-up "^5.0.0"
glob-parent "^6.0.2"
globals "^13.19.0"
graphemer "^1.4.0"
ignore "^5.2.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
is-path-inside "^3.0.3"
js-yaml "^4.1.0"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash.merge "^4.6.2"
minimatch "^3.1.2"
natural-compare "^1.4.0"
optionator "^0.9.3"
strip-ansi "^6.0.1"
text-table "^0.2.0"
eslint@^9.6.0:
version "9.7.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.7.0.tgz#bedb48e1cdc2362a0caaa106a4c6ed943e8b09e4"
integrity sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.11.0"
"@eslint/config-array" "^0.17.0"
"@eslint/eslintrc" "^3.1.0"
"@eslint/js" "9.6.0"
"@eslint/js" "9.7.0"
"@humanwhocodes/module-importer" "^1.0.1"
"@humanwhocodes/retry" "^0.3.0"
"@nodelib/fs.walk" "^1.2.8"
@ -2250,7 +2340,7 @@ eslint@^9.6.0:
cross-spawn "^7.0.2"
debug "^4.3.2"
escape-string-regexp "^4.0.0"
eslint-scope "^8.0.1"
eslint-scope "^8.0.2"
eslint-visitor-keys "^4.0.0"
espree "^10.1.0"
esquery "^1.5.0"
@ -2281,7 +2371,7 @@ espree@^10.0.1, espree@^10.1.0:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.0.0"
espree@^9.3.1:
espree@^9.3.1, espree@^9.6.0, espree@^9.6.1:
version "9.6.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
@ -2290,7 +2380,7 @@ espree@^9.3.1:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^3.4.1"
esquery@^1.4.0, esquery@^1.5.0:
esquery@^1.4.0, esquery@^1.4.2, esquery@^1.5.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
@ -2364,6 +2454,13 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
dependencies:
flat-cache "^3.0.4"
file-entry-cache@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
@ -2386,6 +2483,15 @@ find-up@^5.0.0:
locate-path "^6.0.0"
path-exists "^4.0.0"
flat-cache@^3.0.4:
version "3.2.0"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
dependencies:
flatted "^3.2.9"
keyv "^4.5.3"
rimraf "^3.0.2"
flat-cache@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
@ -2484,6 +2590,11 @@ fs-extra@^9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
@ -2546,6 +2657,18 @@ glob@^11.0.0:
package-json-from-dist "^1.0.0"
path-scurry "^2.0.0"
glob@^7.1.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.1.1"
once "^1.3.0"
path-is-absolute "^1.0.0"
global@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
@ -2559,7 +2682,7 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
globals@^13.24.0:
globals@^13.19.0, globals@^13.24.0:
version "13.24.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
@ -2595,6 +2718,11 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
graphemer@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@ -2754,16 +2882,24 @@ inflation@^2.0.0:
resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.1.0.tgz#9214db11a47e6f756d111c4f9df96971c60f886c"
integrity sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inherits@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@~1.3.0:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
@ -2974,7 +3110,7 @@ keygrip@~1.1.0:
dependencies:
tsscmp "1.0.6"
keyv@^4.5.4:
keyv@^4.5.3, keyv@^4.5.4:
version "4.5.4"
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
@ -3262,11 +3398,16 @@ micromatch@^4.0.4:
braces "^3.0.3"
picomatch "^2.3.1"
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
"mime-db@>= 1.43.0 < 2":
version "1.53.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447"
integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==
mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
@ -3293,7 +3434,7 @@ minimatch@^10.0.0:
dependencies:
brace-expansion "^2.0.1"
minimatch@^3.1.2:
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@ -3322,7 +3463,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
mlly@^1.4.2, mlly@^1.7.0, mlly@^1.7.1:
mlly@^1.4.2, mlly@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.1.tgz#e0336429bb0731b6a8e887b438cbdae522c8f32f"
integrity sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==
@ -3395,9 +3536,9 @@ node-os-utils@^1.3.7:
integrity sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==
node-releases@^2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
version "2.0.17"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.17.tgz#d74bc4fec38d839eec5db2a3c9c963d4f33cb366"
integrity sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==
node-rsa@^1.1.1:
version "1.1.1"
@ -3470,7 +3611,7 @@ on-finished@^2.3.0:
dependencies:
ee-first "1.1.1"
once@^1.3.1, once@^1.4.0:
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@ -3557,7 +3698,7 @@ path-exists@^4.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
path-is-absolute@1.0.1:
path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
@ -3627,7 +3768,7 @@ pkg-fetch@3.4.2:
tar-fs "^2.1.1"
yargs "^16.2.0"
pkg-types@^1.0.3, pkg-types@^1.1.1:
pkg-types@^1.0.3, pkg-types@^1.1.1, pkg-types@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.1.3.tgz#161bb1242b21daf7795036803f28e30222e476e3"
integrity sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==
@ -3662,9 +3803,9 @@ possible-typed-array-names@^1.0.0:
integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
postcss-selector-parser@^6.0.15:
version "6.1.0"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53"
integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==
version "6.1.1"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38"
integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
@ -3860,6 +4001,13 @@ rfdc@^1.3.0:
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies:
glob "^7.1.3"
rimraf@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-6.0.1.tgz#ffb8ad8844dd60332ab15f52bc104bc3ed71ea4e"
@ -3928,9 +4076,9 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.77.7:
version "1.77.7"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.7.tgz#ef3520edc8f59da089f25891d8a6bebf93668ee0"
integrity sha512-9ywH75cO+rLjbrZ6en3Gp8qAMwPGBapFtlsMJoDTkcMU/bSe5a6cjKVUn5Jr4Gzg5GbP3HE8cm+02pLCgcoMow==
version "1.77.8"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd"
integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@ -3947,9 +4095,9 @@ semver@^6.3.1:
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.5, semver@^7.3.6, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
version "7.6.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
version "7.6.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
set-function-length@^1.2.1:
version "1.2.2"
@ -4357,9 +4505,9 @@ typedarray@^0.0.6:
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
ufo@^1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344"
integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==
version "1.5.4"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754"
integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==
undefsafe@^2.0.5:
version "2.0.5"
@ -4371,24 +4519,24 @@ undici-types@~5.26.4:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
unimport@^3.7.1:
version "3.7.2"
resolved "https://registry.yarnpkg.com/unimport/-/unimport-3.7.2.tgz#36fead8bdeb2695b6026861318bf111ad0596a5b"
integrity sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==
unimport@^3.7.2:
version "3.8.0"
resolved "https://registry.yarnpkg.com/unimport/-/unimport-3.8.0.tgz#e2da7e960f7265c221496069826ca693ba1af346"
integrity sha512-leq5bfNxyytAer8cYPi0dR0L6p8ZnZ8NxR9TKsSIbJM47TOxC5qURJXQZ8xuBGqLakUqYO6CvVtf3lWKo9k+8A==
dependencies:
"@rollup/pluginutils" "^5.1.0"
acorn "^8.11.3"
acorn "^8.12.1"
escape-string-regexp "^5.0.0"
estree-walker "^3.0.3"
fast-glob "^3.3.2"
local-pkg "^0.5.0"
magic-string "^0.30.10"
mlly "^1.7.0"
mlly "^1.7.1"
pathe "^1.1.2"
pkg-types "^1.1.1"
pkg-types "^1.1.3"
scule "^1.3.0"
strip-literal "^2.1.0"
unplugin "^1.10.1"
unplugin "^1.11.0"
universalify@^0.1.0:
version "0.1.2"
@ -4406,23 +4554,23 @@ unpipe@1.0.0:
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
unplugin-auto-import@^0.17.6:
version "0.17.6"
resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-0.17.6.tgz#0445f1235137a9182dc01c31be5f48ebf77a6a72"
integrity sha512-dmX0Pex5DzMzVuALkexboOZvh51fL/BD6aoPO7qHoTYGlQp0GRKsREv2KMF1lzYI9SXKQiRxAjwzbQnrFFNydQ==
version "0.17.8"
resolved "https://registry.yarnpkg.com/unplugin-auto-import/-/unplugin-auto-import-0.17.8.tgz#8dd5d1f21700171242553f1a476bd43ffad74af6"
integrity sha512-CHryj6HzJ+n4ASjzwHruD8arhbdl+UXvhuAIlHDs15Y/IMecG3wrf7FVg4pVH/DIysbq/n0phIjNHAjl7TG7Iw==
dependencies:
"@antfu/utils" "^0.7.8"
"@antfu/utils" "^0.7.10"
"@rollup/pluginutils" "^5.1.0"
fast-glob "^3.3.2"
local-pkg "^0.5.0"
magic-string "^0.30.10"
minimatch "^9.0.4"
unimport "^3.7.1"
unplugin "^1.10.1"
unimport "^3.7.2"
unplugin "^1.11.0"
unplugin-vue-components@^0.27.2:
version "0.27.2"
resolved "https://registry.yarnpkg.com/unplugin-vue-components/-/unplugin-vue-components-0.27.2.tgz#bc95691b54d1cf075af468f4ec7b4b2d05dfebfa"
integrity sha512-YifnsmslMRNt+JRQiCG4ZX1+xUQuubUZm76K7Qtg8dmchZJkHIDxZSyfZb5/jqrLWMTm/TUjGJ3ZDlzO6SFnSQ==
version "0.27.3"
resolved "https://registry.yarnpkg.com/unplugin-vue-components/-/unplugin-vue-components-0.27.3.tgz#e7a9980f7feb649306aa92afd61b760385479d42"
integrity sha512-5wg7lbdg5ZcrAQNzyYK+6gcg/DG8K6rO+f5YeuvqGHs/PhpapBvpA4O/0ex/pFthE5WgRk43iWuRZEMLVsdz4Q==
dependencies:
"@antfu/utils" "^0.7.10"
"@rollup/pluginutils" "^5.1.0"
@ -4433,9 +4581,9 @@ unplugin-vue-components@^0.27.2:
magic-string "^0.30.10"
minimatch "^9.0.5"
mlly "^1.7.1"
unplugin "^1.10.1"
unplugin "^1.11.0"
unplugin@^1.10.1:
unplugin@^1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.11.0.tgz#09237b4011075e65c8f4d0ae06e221dee12750e3"
integrity sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==
@ -4491,9 +4639,9 @@ vite-plugin-compression@^0.5.1:
fs-extra "^10.0.0"
vite@^5.3.3:
version "5.3.3"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2"
integrity sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==
version "5.3.4"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.4.tgz#b36ebd47c8a5e3a8727046375d5f10bf9fdf8715"
integrity sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==
dependencies:
esbuild "^0.21.3"
postcss "^8.4.39"