🚀 0.4.4

分完整构建和CDN引用构建
- 拆离fonts字体库
- 拆离图标库
This commit is contained in:
hi2hi 2024-12-07 07:52:23 +00:00
parent 51669134c9
commit 31a8c8a50c
25 changed files with 414 additions and 98 deletions

15
.env
View File

@ -1,4 +1,11 @@
# WS_HOST= #### Sarasa Term SC字体的配置
# API_HOST= # VITE_DISABLE_SARASA_TERM_SC=1
# NEZHA_HOST= # VITE_SARASA_TERM_SC_USE_CDN=1
# NEZHA_HOST_REPACE_PATH=
#### 引用库的CDN配置
# VITE_USE_CDN=1
# VITE_CDN_LIB_TYPE=jsdelivr # jsdelivr | cdnjs | loli
#### 哪吒的默认版本控制
# VITE_NEZHA_VERSION=v1 # v0 | v0

View File

@ -0,0 +1,11 @@
# 能反代WS的主机方便本地ws调试
PROXY_WS_HOST=
# API的HOST/api/xxx会被替换为这个HOST
API_HOST=
# WS的HOST/ws和/api/v1/ws/server会被替换为这个HOST
WS_HOST=
# V0开发模式需要一个哪吒地址用去抓取哪吒的数据
NEZHA_HOST=
# VO开发模式本地会请求/nezha/此项为1时会去掉/nezha/
NEZHA_HOST_REPACE_PATH=1

View File

@ -1,6 +1,9 @@
name: Build and Push Docker Image name: Build and Push Docker Image
on: on:
push:
tags:
- 'v*.*.*'
workflow_dispatch: workflow_dispatch:
inputs: inputs:
version: version:
@ -35,13 +38,24 @@ jobs:
- name: Print version - name: Print version
run: echo "Version is $VERSION" run: echo "Version is $VERSION"
- name: Build project - name: 构建完整引用版本
run: npm run build run: npm run build
- name: Build Docker image - name: 构建完整引用版本的Docker镜像
run: | run: |
docker build -t ghcr.io/${{ github.repository }}:$VERSION . docker build -t ghcr.io/${{ github.repository }}:$VERSION .
- name: 构建CDN引用版本
env:
VITE_SARASA_TERM_SC_USE_CDN: '1'
VITE_USE_CDN: '1'
VITE_CDN_LIB_TYPE: 'jsdelivr'
run: npm run build
- name: 构建CDN引用版本的Docker镜像
run: |
docker build -t ghcr.io/${{ github.repository }}:$VERSION-cdn .
- name: Log in to GitHub Container Registry - name: Log in to GitHub Container Registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
@ -50,3 +64,9 @@ jobs:
docker push ghcr.io/${{ github.repository }}:$VERSION docker push ghcr.io/${{ github.repository }}:$VERSION
docker tag ghcr.io/${{ github.repository }}:$VERSION ghcr.io/${{ github.repository }}:latest docker tag ghcr.io/${{ github.repository }}:$VERSION ghcr.io/${{ github.repository }}:latest
docker push ghcr.io/${{ github.repository }}:latest docker push ghcr.io/${{ github.repository }}:latest
- name: Push CDN Docker image
run: |
docker push ghcr.io/${{ github.repository }}:$VERSION-cdn
docker tag ghcr.io/${{ github.repository }}:$VERSION-cdn ghcr.io/${{ github.repository }}:cdn
docker push ghcr.io/${{ github.repository }}:cdn

View File

@ -1,6 +1,9 @@
name: Build and Release name: Build and Release
on: on:
push:
tags:
- 'v*.*.*'
workflow_dispatch: workflow_dispatch:
inputs: inputs:
version: version:
@ -14,6 +17,8 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
with:
fetch-depth: 2 # 获取最近的两次提交
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v3 uses: actions/setup-node@v3
@ -23,9 +28,6 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: npm install run: npm install
- name: Build project
run: npm run build
- name: Get version from package.json - name: Get version from package.json
id: get_version id: get_version
run: echo "::set-output name=version::$(node -p "require('./package.json').version")" run: echo "::set-output name=version::$(node -p "require('./package.json').version")"
@ -50,30 +52,74 @@ jobs:
draft: false draft: false
prerelease: false prerelease: false
- name: Package first build output - name: 构建v0版本 - 完整引用版本
run: | run: npm run build
zip -r v0-${{ steps.determine_version.outputs.version }}.zip dist
- name: Build project with VITE_NEZHA_VERSION - name: 打包v0-${{ steps.determine_version.outputs.version }}-all.zip
run: | run: zip -r v0-${{ steps.determine_version.outputs.version }}-all.zip dist
export VITE_NEZHA_VERSION=v1
npm run build
- name: Package second build output - name: 构建v0版本 - JSDeliver引用版本
run: | env:
zip -r dist.zip dist VITE_SARASA_TERM_SC_USE_CDN: '1'
VITE_USE_CDN: '1'
VITE_CDN_LIB_TYPE: 'jsdelivr'
run: npm run build
- name: Upload Release Asset - First Build - name: 打包v0-${{ steps.determine_version.outputs.version }}-cdn-jsdelivr.zip
run: zip -r v0-${{ steps.determine_version.outputs.version }}-cdn-jsdelivr.zip dist
- name: 构建v0版本 - loli(CDNJS)引用版本
env:
VITE_SARASA_TERM_SC_USE_CDN: '1'
VITE_USE_CDN: '1'
VITE_CDN_LIB_TYPE: 'loli'
run: npm run build
- name: 打包v0-${{ steps.determine_version.outputs.version }}-cdn-loli.zip
run: zip -r v0-${{ steps.determine_version.outputs.version }}-cdn-loli.zip dist
- name: 构建哪吒v1内置版本
env:
VITE_NEZHA_VERSION: 'v1'
VITE_SARASA_TERM_SC_USE_CDN: '1'
VITE_USE_CDN: '1'
VITE_CDN_LIB_TYPE: 'jsdelivr'
run: npm run build
- name: 打包dist.zip
run: zip -r dist.zip dist
- name: Upload v0-${{ steps.determine_version.outputs.version }}-all.zip
uses: actions/upload-release-asset@v1 uses: actions/upload-release-asset@v1
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
upload_url: ${{ steps.create_release.outputs.upload_url }} upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./v0-${{ steps.determine_version.outputs.version }}.zip asset_path: ./v0-${{ steps.determine_version.outputs.version }}-all.zip
asset_name: v0-${{ steps.determine_version.outputs.version }}.zip asset_name: v0-${{ steps.determine_version.outputs.version }}-all.zip
asset_content_type: application/zip asset_content_type: application/zip
- name: Upload Release Asset - Second Build - name: Upload v0-${{ steps.determine_version.outputs.version }}-cdn-jsdelivr.zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./v0-${{ steps.determine_version.outputs.version }}-cdn-jsdelivr.zip
asset_name: v0-${{ steps.determine_version.outputs.version }}-cdn-jsdelivr.zip
asset_content_type: application/zip
- name: Upload v0-${{ steps.determine_version.outputs.version }}-cdn-loli.zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./v0-${{ steps.determine_version.outputs.version }}-cdn-loli.zip
asset_name: v0-${{ steps.determine_version.outputs.version }}-cdn-loli.zip
asset_content_type: application/zip
- name: Upload dist.zip
uses: actions/upload-release-asset@v1 uses: actions/upload-release-asset@v1
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -85,8 +131,20 @@ jobs:
- name: Add release notes - name: Add release notes
run: | run: |
# 获取最近一次提交的变更内容
git diff HEAD^ HEAD --name-only > changes.txt
# 获取现有的发布说明
gh release view v${{ steps.determine_version.outputs.version }} --json body -q .body > body.txt gh release view v${{ steps.determine_version.outputs.version }} --json body -q .body > body.txt
echo -e "哪吒V1请下载dist.zip\n哪吒V0请下载v0-${{ steps.determine_version.outputs.version }}.zip" >> body.txt
# 将变更内容添加到发布说明中
echo -e "### Changes in this release\n" >> body.txt
cat changes.txt >> body.txt
# 添加其他发布说明
echo -e "\n哪吒V1请下载dist.zip\n哪吒V0请下载v0-${{ steps.determine_version.outputs.version }}-all.zip\n至于all是全量的cdn-jsdelivr是jsdelivr引用版cdn-loli是cdnjs引用版\nv0版本构建物通过修改./config.js指定nezhaVersion版本可以正常在v1中使用" >> body.txt
# 更新发布说明
gh release edit v${{ steps.determine_version.outputs.version }} --notes-file body.txt gh release edit v${{ steps.determine_version.outputs.version }} --notes-file body.txt
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,10 +1,11 @@
{ {
"name": "nazhua", "name": "nazhua",
"version": "0.4.3", "version": "0.4.4",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"build:cdn": "cross-env VITE_SARASA_TERM_SC_USE_CDN=1 VITE_USE_CDN=1 vite build",
"preview": "vite preview", "preview": "vite preview",
"lint": "eslint ." "lint": "eslint ."
}, },
@ -27,13 +28,15 @@
"@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@vitejs/plugin-vue": "^5.1.4", "@vitejs/plugin-vue": "^5.1.4",
"@vue/eslint-config-airbnb": "^7.0.0", "@vue/eslint-config-airbnb": "^7.0.0",
"cross-env": "^7.0.3",
"dotenv": "^16.4.5", "dotenv": "^16.4.5",
"eslint": "^8.34.0", "eslint": "^8.34.0",
"eslint-plugin-vue": "^9.9.0", "eslint-plugin-vue": "^9.9.0",
"sass": "^1.81.0", "sass": "^1.81.0",
"vite": "^5.4.10", "vite": "^5.4.10",
"vite-plugin-babel": "^1.2.0", "vite-plugin-babel": "^1.2.0",
"vite-plugin-eslint": "^1.8.1" "vite-plugin-eslint": "^1.8.1",
"vite-svg-loader": "^5.1.0"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -1,6 +1,7 @@
# Nazhua # Nazhua
基于哪吒监控(nezha.wiki)v0版本构建的前端主题目前兼容与v0相同数据结构的v1版本。 基于哪吒监控(nezha.wiki)v0版本构建的前端主题目前兼容与v0相同数据结构的v1版本。
主题有点**重**,因为内置了一个带中文的`SarasaTermSC-SemiBold`字体。 ~~主题有点**重**,因为内置了一个带中文的`SarasaTermSC-SemiBold`字体。~~
根据不同场景,可以选择是否打包带入或者是否加载这个字体。
## 劝退指南 用前必读 ## 劝退指南 用前必读
1. 本主题是基于哪吒监控v0版本构建的不确定能否完美v1版本。*20241206的版本已适配* 1. 本主题是基于哪吒监控v0版本构建的不确定能否完美v1版本。*20241206的版本已适配*
@ -11,9 +12,9 @@
### Docker版本的nazhua ### Docker版本的nazhua
使用V1必须在`config.js`中指定`nezhaVersion`的版本为`v1`**大小写敏感* 使用V1必须在`config.js`中指定`nezhaVersion`的版本为`v1`**大小写敏感*
默认的数据是基于V0 默认的数据是基于V0
### Release版本的nazhua ### Release版本的nazhua
V1下载最新版本[Releases](https://github.com/hi2shark/nazhua/releases)的`dist.zip` V1下载最新版本[Releases](https://github.com/hi2shark/nazhua/releases)的`dist.zip`
V0下载最新版本[Releases](https://github.com/hi2shark/nazhua/releases)的`v0-X.X.X.zip`; V0下载最新版本[Releases](https://github.com/hi2shark/nazhua/releases)的`v0-{版本}-all.zip`或`v0-{版本}.zip`;
## 关于点阵地图 ## 关于点阵地图
点阵地图是一个失真的地图,地图边际与城市位置都不是真实的经纬度坐标,因此无法通过经纬度来定位城市。 点阵地图是一个失真的地图,地图边际与城市位置都不是真实的经纬度坐标,因此无法通过经纬度来定位城市。
@ -103,9 +104,16 @@ services:
``` ```
建议通过docker-compose部署服务然后通过cloudflare的tunnels向外提供服务可以不用自己配置https证书。 建议通过docker-compose部署服务然后通过cloudflare的tunnels向外提供服务可以不用自己配置https证书。
**再次提示哪吒V1的必须设置config.js中的nezhaVersion为v1** **再次提示哪吒V1的必须设置config.js中的nezhaVersion为v1**
**如果不想加载完整的内置库可以使用cdn引用镜像**
例如:`ghcr.io/hi2shark/nazhua:latest`替换为`ghcr.io/hi2shark/nazhua:cdn`
### Nginx配置示例 ### Nginx配置示例
```nginx ```nginx
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server { server {
listen 80; listen 80;
server_name nazhua.example.com; server_name nazhua.example.com;

View File

@ -7,6 +7,8 @@
<script setup> <script setup>
import { import {
ref, ref,
computed,
watch,
provide, provide,
onMounted, onMounted,
} from 'vue'; } from 'vue';
@ -45,10 +47,16 @@ if (isWindows) {
document.body.classList.add('windows'); document.body.classList.add('windows');
} }
// Sarasa Term SC // Sarasa Term SC
const loadSarasaTermSC = config.nazhua.disableSarasaTermSC !== true; const loadSarasaTermSC = computed(() => config.nazhua.disableSarasaTermSC !== true);
if (loadSarasaTermSC) { watch(loadSarasaTermSC, (value) => {
document.body.classList.add('sarasa-term-sc'); if (value) {
} document.body.classList.add('sarasa-term-sc');
} else {
document.body.classList.remove('sarasa-term-sc');
}
}, {
immediate: true,
});
/** /**
* websocket断连的自动重连 * websocket断连的自动重连

View File

@ -0,0 +1,6 @@
@font-face {
font-family: "Sarasa Term SC";
src: url("https://cdn.jsdelivr.net/gh/hi2shark/nazhua@main/fonts/SarasaTermSC/SarasaTermSC-SemiBold.woff2") format("woff2"),
url("https://cdn.jsdelivr.net/gh/hi2shark/nazhua@main/fonts/SarasaTermSC/SarasaTermSC-SemiBold.woff") format("woff");
font-display: swap;
}

View File

@ -0,0 +1,6 @@
@font-face {
font-family: "Sarasa Term SC";
src: url("./SarasaTermSC-SemiBold.woff2") format("woff2"),
url("./SarasaTermSC-SemiBold.woff") format("woff");
font-display: swap;
}

View File

@ -4,8 +4,8 @@ body {
line-height: 1.8; line-height: 1.8;
font-size: 14px; font-size: 14px;
font-family: 'Microsoft YaHei', '微软雅黑', 'PingFang SC', 'HanHei SC', 'Helvetica Neue', 'Helvetica', 'STHeitiSC-Light', 'Arial', sans-serif; font-family: 'Microsoft YaHei', '微软雅黑', 'PingFang SC', 'HanHei SC', 'Helvetica Neue', 'Helvetica', 'STHeitiSC-Light', 'Arial', sans-serif;
color: #555; color: var(--global-text-color);
background: #fff; background: var(--global-background-color);
-webkit-text-size-adjust: none; -webkit-text-size-adjust: none;
text-size-adjust: none; text-size-adjust: none;
} }
@ -97,7 +97,7 @@ a:hover {
} }
a { a {
color: #369; color: var(--global-link-color);
transition: color 150ms linear; transition: color 150ms linear;
cursor: pointer; cursor: pointer;
} }
@ -141,24 +141,3 @@ h6 {
div:focus { div:focus {
outline: none; outline: none;
} }
@font-face {
font-family: "Sarasa Term SC";
src: url("../fonts/SarasaTermSC-SemiBold.woff2") format("woff2"),
url("../fonts/SarasaTermSC-SemiBold.woff2") format("woff");
font-display: swap;
}
body.sarasa-term-sc {
font-family:
"Sarasa Term SC",
'Microsoft YaHei',
'微软雅黑',
'PingFang SC',
'HanHei SC',
'Helvetica Neue',
'Helvetica',
'STHeitiSC-Light',
'Arial',
sans-serif;
}

View File

@ -0,0 +1,13 @@
body.sarasa-term-sc {
font-family:
"Sarasa Term SC",
'Microsoft YaHei',
'微软雅黑',
'PingFang SC',
'HanHei SC',
'Helvetica Neue',
'Helvetica',
'STHeitiSC-Light',
'Arial',
sans-serif;
}

View File

@ -7,6 +7,10 @@
--detail-container-width: 900px; --detail-container-width: 900px;
--global-background-color: #392f41;
--global-text-color: #ddd;
--global-link-color: #2ca9e1;
--layout-main-bg-color: rgba(20, 30, 40, 0.75); --layout-main-bg-color: rgba(20, 30, 40, 0.75);
--layout-bg-color: #252748; --layout-bg-color: #252748;

View File

@ -58,6 +58,9 @@ function handleClick() {
width: 16px; width: 16px;
height: 16px; height: 16px;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
:hover {
z-index: 100;
}
.point-block { .point-block {
position: absolute; position: absolute;

View File

@ -7,6 +7,9 @@ const defaultNezhaVersion = import.meta.env.VITE_NEZHA_VERSION;
const config = reactive({ const config = reactive({
nazhua: { nazhua: {
title: '哪吒监控', title: '哪吒监控',
// 如果打包禁用 Sarasa Term SC 字体,默认为禁用该字体的配置
disableSarasaTermSC: import.meta.env.VITE_DISABLE_SARASA_TERM_SC === '1',
nezhaVersion: ['v0', 'v1'].includes(defaultNezhaVersion) ? defaultNezhaVersion : 'v0', nezhaVersion: ['v0', 'v1'].includes(defaultNezhaVersion) ? defaultNezhaVersion : 'v0',
apiMonitorPath: '/api/v1/monitor/{id}', apiMonitorPath: '/api/v1/monitor/{id}',
wsPath: '/ws', wsPath: '/ws',
@ -27,5 +30,7 @@ export function mergeNazhuaConfig(customConfig) {
config.nazhua[key] = customConfig[key]; config.nazhua[key] = customConfig[key];
}); });
} }
// 暴露合并配置方法
window.$mergeNazhuaConfig = mergeNazhuaConfig;
export default config; export default config;

View File

@ -127,7 +127,6 @@
*/ */
import { import {
computed, computed,
onMounted,
} from 'vue'; } from 'vue';
import { import {
useStore, useStore,
@ -154,10 +153,10 @@ const headerStyle = computed(() => {
return style; return style;
}); });
const showServerCount = config.nazhua.hideNavbarServerCount !== true; const showServerCount = computed(() => config.nazhua.hideNavbarServerCount !== true);
const serverCount = computed(() => store.state.serverCount); const serverCount = computed(() => store.state.serverCount);
const showServerStat = config.nazhua.hideNavbarServerStat !== true; const showServerStat = computed(() => config.nazhua.hideNavbarServerStat !== true);
const serverStat = computed(() => { const serverStat = computed(() => {
const transfer = { const transfer = {
in: 0, in: 0,
@ -262,10 +261,10 @@ const headerClass = computed(() => {
if (route.name === 'ServerDetail') { if (route.name === 'ServerDetail') {
classes.push('layout-header--detail'); classes.push('layout-header--detail');
} }
if (showServerStat) { if (showServerStat.value) {
classes.push('layout-header--show-server-stat'); classes.push('layout-header--show-server-stat');
} }
if (showServerCount) { if (showServerCount.value) {
classes.push('layout-header--show-server-count'); classes.push('layout-header--show-server-count');
} }
return classes; return classes;
@ -284,11 +283,7 @@ const showDashboardBtn = [
config.nazhua.v1HideNezhaDashboardBtn !== false, config.nazhua.v1HideNezhaDashboardBtn !== false,
].every((item) => item); ].every((item) => item);
const userLogin = computed(() => store.state.profile?.username); const userLogin = computed(() => store.state.profile?.username);
const dashboardUrl = config.nazhua.v1DashboardUrl || '/dashboard'; const dashboardUrl = computed(() => config.nazhua.v1DashboardUrl || '/dashboard');
onMounted(() => {
title.value = config.nazhua.title;
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

51
src/load.js Normal file
View File

@ -0,0 +1,51 @@
// 是否禁用 Sarasa Term SC 字体
if (import.meta.env.VITE_DISABLE_SARASA_TERM_SC !== '1') {
if (import.meta.env.VITE_SARASA_TERM_SC_USE_CDN) {
import('./assets/fonts/SarasaTermSC/cdn-font.css');
} else {
import('./assets/fonts/SarasaTermSC/font.css');
}
import('./assets/scss/sarasa-term-sc.scss');
}
/**
* 使用 CDN 加载 CSS 文件
*/
function useCdnCss(item) {
const cdnType = import.meta.env.VITE_CDN_LIB_TYPE;
let cssUrl = item.jsdelivr;
if (['cdnjs', 'loli'].includes(cdnType)) {
cssUrl = item.cdnjs;
if (cdnType === 'loli') {
cssUrl = cssUrl.replace('https://cdnjs.cloudflare.com/', 'https://cdn.loli.net/');
}
}
const cdnStylesheet = document.createElement('link');
cdnStylesheet.rel = 'stylesheet';
cdnStylesheet.href = cssUrl;
document.head.appendChild(cdnStylesheet);
}
// 判断是否使用 CDN
if (import.meta.env.VITE_USE_CDN) {
Object.entries({
remixicon: {
jsdelivr: 'https://cdn.jsdelivr.net/npm/remixicon@4.5.0/fonts/remixicon.css',
cdnjs: 'https://cdnjs.cloudflare.com/ajax/libs/remixicon/4.5.0/remixicon.css',
},
flagIcons: {
jsdelivr: 'https://cdn.jsdelivr.net/npm/flag-icons/css/flag-icons.min.css',
cdnjs: 'https://cdnjs.cloudflare.com/ajax/libs/flag-icons/7.2.3/css/flag-icons.min.css',
},
fontLogos: {
jsdelivr: 'https://cdn.jsdelivr.net/npm/font-logos/assets/font-logos.css',
cdnjs: 'https://cdnjs.cloudflare.com/ajax/libs/font-logos/1.3.0/assets/font-logos.css',
},
}).forEach(([, item]) => {
useCdnCss(item);
});
} else {
import('remixicon/fonts/remixicon.css');
import('flag-icons/css/flag-icons.min.css');
import('font-logos/assets/font-logos.css');
}

View File

@ -1,6 +1,4 @@
import 'remixicon/fonts/remixicon.css'; import './load';
import 'flag-icons/css/flag-icons.min.css';
import 'font-logos/assets/font-logos.css';
import './assets/scss/base.scss'; import './assets/scss/base.scss';
import router from './router'; import router from './router';
import store from './store'; import store from './store';
@ -12,5 +10,6 @@ export default (app) => {
app.use(router); app.use(router);
app.use(store); app.use(store);
app.component('DotDotBox', DotDotBox); app.component('DotDotBox', DotDotBox);
app.config.globalProperties.$config = config; app.config.globalProperties.$config = config;
}; };

View File

@ -205,7 +205,7 @@ const props = defineProps({
}, },
}); });
const buyBtnText = config.nazhua.buyBtnText || '购买'; const buyBtnText = computed(() => config.nazhua.buyBtnText || '购买');
const showBuyBtn = computed(() => !!props.info?.PublicNote?.customData?.orderLink); const showBuyBtn = computed(() => !!props.info?.PublicNote?.customData?.orderLink);
function toBuy() { function toBuy() {

View File

@ -93,7 +93,7 @@ const {
props, props,
}); });
const buyBtnText = config.nazhua.buyBtnText || '购买'; const buyBtnText = computed(() => config.nazhua.buyBtnText || '购买');
const showBuyBtn = computed(() => !!props.info?.PublicNote?.customData?.orderLink); const showBuyBtn = computed(() => !!props.info?.PublicNote?.customData?.orderLink);
function toBuy() { function toBuy() {

View File

@ -41,21 +41,21 @@
</div> </div>
</div> </div>
<div <div
v-if="showStatus || showStatus" v-if="$config.nazhua.hideListItemStatusDonut !== true && $config.nazhua.hideListItemStat !== true"
class="server-list-item-main" class="server-list-item-main"
@click="openDetail" @click="openDetail"
> >
<server-list-item-status <server-list-item-status
v-if="showStatus" v-if="$config.nazhua.hideListItemStatusDonut !== true"
:info="info" :info="info"
/> />
<server-real-time <server-real-time
v-if="showStat" v-if="$config.nazhua.hideListItemStat !== true"
:info="info" :info="info"
/> />
</div> </div>
<server-list-item-bill <server-list-item-bill
v-if="showBill" v-if="$config.nazhua.hideListItemBill !== true"
:info="info" :info="info"
/> />
</dot-dot-box> </dot-dot-box>
@ -70,8 +70,6 @@ import {
useRouter, useRouter,
} from 'vue-router'; } from 'vue-router';
import config from '@/config';
import handleServerInfo from '@/views/composable/server-info'; import handleServerInfo from '@/views/composable/server-info';
import ServerRealTime from '@/views/components/server/server-real-time.vue'; import ServerRealTime from '@/views/components/server/server-real-time.vue';
import ServerListItemStatus from './server-list-item-status.vue'; import ServerListItemStatus from './server-list-item-status.vue';
@ -101,10 +99,6 @@ function openDetail() {
}, },
}); });
} }
const showStatus = config.nazhua.hideListItemStatusDonut !== true;
const showStat = config.nazhua.hideListItemStat !== true;
const showBill = config.nazhua.hideListItemBill !== true;
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -74,13 +74,22 @@ import ServerItem from './components/server-list/server-list-item.vue';
const store = useStore(); const store = useStore();
const worldMapWidth = ref(); const worldMapWidth = ref();
const showFilter = config.nazhua.hideFilter !== true; const showFilter = computed(() => config.nazhua.hideFilter !== true);
const filterFormData = ref({ const filterFormData = ref({
tag: '', tag: '',
online: '', online: '',
}); });
// //
const showTag = config.nazhua.hideTag !== true; const showTag = computed(() => {
if (config.nazhua.hideGroup === true) {
return false;
}
// hideTaghideGroup
if (config.nazhua.hideTag === true) {
return false;
}
return true;
});
// //
const serverList = computed(() => store.state.serverList); const serverList = computed(() => store.state.serverList);

View File

@ -4,6 +4,7 @@ import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue'; import vue from '@vitejs/plugin-vue';
import babel from 'vite-plugin-babel'; import babel from 'vite-plugin-babel';
import eslintPlugin from 'vite-plugin-eslint'; import eslintPlugin from 'vite-plugin-eslint';
import svgLoader from 'vite-svg-loader';
import packageJson from './package'; import packageJson from './package';
dotenv.config({ dotenv.config({
@ -25,23 +26,23 @@ export default defineConfig({
changeOrigin: true, changeOrigin: true,
}, },
'/ws': { '/ws': {
target: process.env.WS_HOST, target: process.env.PROXY_WS_HOST || process.env.WS_HOST,
changeOrigin: true, changeOrigin: true,
ws: true, ws: true,
rewrite: (e) => { rewrite: (e) => {
if (process.env.REWRITE_WS_HOST) { if (process.env.PROXY_WS_HOST) {
return `/proxy?wsPath=${process.env.REWRITE_WS_HOST}`; return `/proxy?wsPath=${process.env.WS_HOST}`;
} }
return e; return e;
}, },
}, },
'/api/v1/ws/server': { '/api/v1/ws/server': {
target: process.env.WS_HOST, target: process.env.PROXY_WS_HOST || process.env.WS_HOST,
changeOrigin: true, changeOrigin: true,
ws: true, ws: true,
rewrite: (e) => { rewrite: (e) => {
if (process.env.REWRITE_WS_HOST) { if (process.env.PROXY_WS_HOST) {
return `/proxy?wsPath=${process.env.REWRITE_WS_HOST}`; return `/proxy?wsPath=${process.env.WS_HOST}`;
} }
return e; return e;
}, },
@ -75,11 +76,31 @@ export default defineConfig({
eslintPlugin({ eslintPlugin({
include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue'], include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue'],
}), }),
svgLoader(),
], ],
resolve: { build: {
alias: { assetsInlineLimit: 8192, // 8KB 以下的资源会被内联
'@': path.resolve(__dirname, './src/'), rollupOptions: {
'~@': path.resolve(__dirname, './src/'), output: {
manualChunks(id) {
if (id.includes('node_modules')) {
return 'vendor';
}
if (id.includes('.svg')) {
return 'svg';
}
return 'default';
},
},
}, },
}, },
resolve: {
alias: (() => {
const maps = {
'@': path.resolve(__dirname, './src/'),
'~@': path.resolve(__dirname, './src/'),
};
return maps;
})(),
},
}); });

124
yarn.lock
View File

@ -615,6 +615,11 @@
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"
integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==
"@trysound/sax@0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
"@types/eslint@^8.4.5": "@types/eslint@^8.4.5":
version "8.56.12" version "8.56.12"
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a"
@ -1004,6 +1009,11 @@ combined-stream@^1.0.8:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
concat-map@0.0.1: concat-map@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@ -1019,7 +1029,14 @@ convert-source-map@^2.0.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
cross-spawn@^7.0.2: cross-env@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
dependencies:
cross-spawn "^7.0.1"
cross-spawn@^7.0.1, cross-spawn@^7.0.2:
version "7.0.6" version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
@ -1028,11 +1045,50 @@ cross-spawn@^7.0.2:
shebang-command "^2.0.0" shebang-command "^2.0.0"
which "^2.0.1" which "^2.0.1"
css-select@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
dependencies:
boolbase "^1.0.0"
css-what "^6.1.0"
domhandler "^5.0.2"
domutils "^3.0.1"
nth-check "^2.0.1"
css-tree@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
dependencies:
mdn-data "2.0.30"
source-map-js "^1.0.1"
css-tree@~2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
dependencies:
mdn-data "2.0.28"
source-map-js "^1.0.1"
css-what@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
cssesc@^3.0.0: cssesc@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
csso@^5.0.5:
version "5.0.5"
resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
dependencies:
css-tree "~2.2.0"
csstype@^3.1.3: csstype@^3.1.3:
version "3.1.3" version "3.1.3"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
@ -1136,6 +1192,36 @@ doctrine@^3.0.0:
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
dom-serializer@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
dependencies:
domelementtype "^2.3.0"
domhandler "^5.0.2"
entities "^4.2.0"
domelementtype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
domhandler@^5.0.2, domhandler@^5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
dependencies:
domelementtype "^2.3.0"
domutils@^3.0.1:
version "3.1.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
dependencies:
dom-serializer "^2.0.0"
domelementtype "^2.3.0"
domhandler "^5.0.3"
dotenv@^16.4.5: dotenv@^16.4.5:
version "16.4.5" version "16.4.5"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
@ -1164,7 +1250,7 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
entities@^4.5.0: entities@^4.2.0, entities@^4.5.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@ -2156,6 +2242,16 @@ magic-string@^0.30.11:
dependencies: dependencies:
"@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/sourcemap-codec" "^1.5.0"
mdn-data@2.0.28:
version "2.0.28"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==
mdn-data@2.0.30:
version "2.0.30"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
micromatch@^4.0.5: micromatch@^4.0.5:
version "4.0.8" version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
@ -2213,7 +2309,7 @@ node-releases@^2.0.18:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
nth-check@^2.1.1: nth-check@^2.0.1, nth-check@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
@ -2601,7 +2697,7 @@ side-channel@^1.0.4, side-channel@^1.0.6:
get-intrinsic "^1.2.4" get-intrinsic "^1.2.4"
object-inspect "^1.13.1" object-inspect "^1.13.1"
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0, source-map-js@^1.2.1: "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.0, source-map-js@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@ -2698,6 +2794,19 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
svgo@^3.0.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8"
integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==
dependencies:
"@trysound/sax" "0.2.0"
commander "^7.2.0"
css-select "^5.1.0"
css-tree "^2.3.1"
css-what "^6.1.0"
csso "^5.0.5"
picocolors "^1.0.0"
text-table@^0.2.0: text-table@^0.2.0:
version "0.2.0" version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@ -2825,6 +2934,13 @@ vite-plugin-eslint@^1.8.1:
"@types/eslint" "^8.4.5" "@types/eslint" "^8.4.5"
rollup "^2.77.2" rollup "^2.77.2"
vite-svg-loader@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vite-svg-loader/-/vite-svg-loader-5.1.0.tgz#b0b89bd8024bc0f707d0e8d7422446ac01576d94"
integrity sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==
dependencies:
svgo "^3.0.2"
vite@^5.4.10: vite@^5.4.10:
version "5.4.11" version "5.4.11"
resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5"