chore: prepare v2.2.0

This commit is contained in:
0xJacky
2025-08-31 17:09:12 +08:00
parent a56322d58e
commit 8b45bb13c1
7 changed files with 92 additions and 338 deletions
-1
View File
@@ -44,7 +44,6 @@ declare module 'vue' {
AMenu: typeof import('ant-design-vue/es')['Menu']
AMenuItem: typeof import('ant-design-vue/es')['MenuItem']
AModal: typeof import('ant-design-vue/es')['Modal']
APageHeader: typeof import('ant-design-vue/es')['PageHeader']
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
APopover: typeof import('ant-design-vue/es')['Popover']
AProgress: typeof import('ant-design-vue/es')['Progress']
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "nginx-ui-app-next",
"type": "module",
"version": "2.1.17",
"version": "2.2.0",
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b",
"scripts": {
"dev": "vite --host",
+1 -1
View File
@@ -1 +1 @@
{"version":"2.1.17","build_id":32,"total_build":499}
{"version":"2.2.0","build_id":1,"total_build":500}
@@ -51,9 +51,6 @@ function removeBannedIP(ip: string) {
<template>
<div>
<h2>
{{ $gettext('Authentication Settings') }}
</h2>
<div
v-if="data.webauthn.rpid
&& data.webauthn.rp_display_name
+90 -89
View File
@@ -1,3 +1,4 @@
//go:generate go run .
package main
import (
@@ -44,7 +45,7 @@ func main() {
log.Printf("INFO: Backend license collection completed: %d components", len(backendLicenses))
}
// Generate frontend licenses
// Generate frontend licenses
frontendLicenses, err := generateFrontendLicenses()
if err != nil {
log.Printf("Error generating frontend licenses: %v", err)
@@ -78,7 +79,7 @@ func main() {
if err != nil {
log.Fatalf("Error closing xz writer: %v", err)
}
log.Printf("INFO: Compressed size: %d bytes (%.1f%% of original)",
log.Printf("INFO: Compressed size: %d bytes (%.1f%% of original)",
compressed.Len(), float64(compressed.Len())/float64(len(jsonData))*100)
// Write compressed data to file
@@ -106,7 +107,7 @@ func generateBackendLicenses() ([]License, error) {
var licenses []License
log.Println("INFO: Collecting backend Go modules...")
// Get only direct and indirect dependencies, exclude workspace modules
cmd := exec.Command("go", "mod", "graph")
output, err := cmd.Output()
@@ -117,40 +118,40 @@ func generateBackendLicenses() ([]License, error) {
// Parse module graph to get unique dependencies
depMap := make(map[string]string) // path -> version
lines := strings.Split(string(output), "\n")
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
continue
}
parts := strings.Fields(line)
if len(parts) != 2 {
continue
}
// Extract dependency info from "module@version dependency@version"
dep := parts[1]
if dep == "" || !strings.Contains(dep, "@") {
continue
}
atIndex := strings.LastIndex(dep, "@")
if atIndex == -1 {
continue
}
path := dep[:atIndex]
version := dep[atIndex+1:]
// Skip our own module and workspace modules
if path == "" ||
strings.HasPrefix(path, "github.com/0xJacky/Nginx-UI") ||
strings.Contains(path, "git.uozi.org") ||
strings.Contains(path, "apple-store-helper") {
if path == "" ||
strings.HasPrefix(path, "github.com/0xJacky/Nginx-UI") ||
strings.Contains(path, "git.uozi.org") ||
strings.Contains(path, "apple-store-helper") {
continue
}
// Only keep the first version we see (go mod graph shows all versions)
if _, exists := depMap[path]; !exists {
depMap[path] = version
@@ -162,7 +163,7 @@ func generateBackendLicenses() ([]License, error) {
Path string `json:"Path"`
Version string `json:"Version"`
}
for path, version := range depMap {
allMods = append(allMods, struct {
Path string `json:"Path"`
@@ -191,13 +192,13 @@ func generateBackendLicenses() ([]License, error) {
Version string
Index int
}, len(allMods))
results := make(chan License, len(allMods))
// Progress tracking
var processed int32
var mu sync.Mutex
// Start workers
var wg sync.WaitGroup
for i := 0; i < maxWorkers; i++ {
@@ -222,7 +223,7 @@ func generateBackendLicenses() ([]License, error) {
processed++
currentCount := processed
mu.Unlock()
log.Printf("INFO: [%d/%d] Backend: %s -> %s", currentCount, len(allMods), job.Path, licenseText)
results <- license
}
@@ -292,7 +293,7 @@ func generateFrontendLicenses() ([]License, error) {
Version string
Index int
}
i := 0
for name, version := range pkg.Dependencies {
packages = append(packages, struct {
@@ -314,13 +315,13 @@ func generateFrontendLicenses() ([]License, error) {
Version string
Index int
}, len(packages))
results := make(chan License, len(packages))
// Progress tracking
var processed int32
var mu sync.Mutex
// Start workers
var wg sync.WaitGroup
for i := 0; i < maxWorkers; i++ {
@@ -345,7 +346,7 @@ func generateFrontendLicenses() ([]License, error) {
processed++
currentCount := processed
mu.Unlock()
log.Printf("INFO: [%d/%d] Frontend: %s -> %s", currentCount, len(packages), job.Name, licenseText)
results <- license
}
@@ -387,15 +388,15 @@ func tryGetLicenseFromGitHub(modulePath string) string {
owner := parts[1]
repo := parts[2]
// Try common license files and branches
licenseFiles := []string{"LICENSE", "LICENSE.txt", "LICENSE.md", "COPYING", "COPYING.txt", "License", "license"}
branches := []string{"master", "main", "HEAD"}
for _, branch := range branches {
for _, file := range licenseFiles {
url := fmt.Sprintf("https://raw.githubusercontent.com/%s/%s/%s/%s", owner, repo, branch, file)
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
@@ -408,7 +409,7 @@ func tryGetLicenseFromGitHub(modulePath string) string {
if err != nil {
continue
}
// Extract license type from content
content := string(body)
licenseType := extractLicenseType(content)
@@ -427,19 +428,19 @@ func tryGetLicenseFromGit(modulePath string) string {
if strings.HasPrefix(modulePath, "github.com/") {
return tryGetLicenseFromGitHub(modulePath)
}
if strings.HasPrefix(modulePath, "gitlab.com/") {
return tryGetLicenseFromGitLab(modulePath)
}
if strings.HasPrefix(modulePath, "gitee.com/") {
return tryGetLicenseFromGitee(modulePath)
}
if strings.HasPrefix(modulePath, "bitbucket.org/") {
return tryGetLicenseFromBitbucket(modulePath)
}
// Try to use go.mod info or pkg.go.dev API
return tryGetLicenseFromPkgGoDev(modulePath)
}
@@ -449,18 +450,18 @@ func tryGetLicenseFromGitLab(modulePath string) string {
if len(parts) < 3 {
return ""
}
owner := parts[1]
repo := parts[2]
// GitLab raw file URL format
licenseFiles := []string{"LICENSE", "LICENSE.txt", "LICENSE.md", "COPYING", "License"}
branches := []string{"master", "main"}
for _, branch := range branches {
for _, file := range licenseFiles {
url := fmt.Sprintf("https://gitlab.com/%s/%s/-/raw/%s/%s", owner, repo, branch, file)
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
@@ -473,7 +474,7 @@ func tryGetLicenseFromGitLab(modulePath string) string {
if err != nil {
continue
}
content := string(body)
licenseType := extractLicenseType(content)
if licenseType != "Custom" {
@@ -482,7 +483,7 @@ func tryGetLicenseFromGitLab(modulePath string) string {
}
}
}
return ""
}
@@ -491,18 +492,18 @@ func tryGetLicenseFromGitee(modulePath string) string {
if len(parts) < 3 {
return ""
}
owner := parts[1]
repo := parts[2]
// Gitee raw file URL format
licenseFiles := []string{"LICENSE", "LICENSE.txt", "LICENSE.md", "COPYING"}
branches := []string{"master", "main"}
for _, branch := range branches {
for _, file := range licenseFiles {
url := fmt.Sprintf("https://gitee.com/%s/%s/raw/%s/%s", owner, repo, branch, file)
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
@@ -515,7 +516,7 @@ func tryGetLicenseFromGitee(modulePath string) string {
if err != nil {
continue
}
content := string(body)
licenseType := extractLicenseType(content)
if licenseType != "Custom" {
@@ -524,7 +525,7 @@ func tryGetLicenseFromGitee(modulePath string) string {
}
}
}
return ""
}
@@ -533,18 +534,18 @@ func tryGetLicenseFromBitbucket(modulePath string) string {
if len(parts) < 3 {
return ""
}
owner := parts[1]
repo := parts[2]
// Bitbucket raw file URL format
// Bitbucket raw file URL format
licenseFiles := []string{"LICENSE", "LICENSE.txt", "LICENSE.md", "COPYING"}
branches := []string{"master", "main"}
for _, branch := range branches {
for _, file := range licenseFiles {
url := fmt.Sprintf("https://bitbucket.org/%s/%s/raw/%s/%s", owner, repo, branch, file)
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
@@ -557,7 +558,7 @@ func tryGetLicenseFromBitbucket(modulePath string) string {
if err != nil {
continue
}
content := string(body)
licenseType := extractLicenseType(content)
if licenseType != "Custom" {
@@ -566,14 +567,14 @@ func tryGetLicenseFromBitbucket(modulePath string) string {
}
}
}
return ""
}
func tryGetLicenseFromPkgGoDev(modulePath string) string {
// Try to get license info from pkg.go.dev API
url := fmt.Sprintf("https://api.deps.dev/v3alpha/systems/go/packages/%s", modulePath)
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
@@ -607,7 +608,7 @@ func tryGetLicenseFromPkgGoDev(modulePath string) string {
func tryGetNpmLicense(packageName string) string {
// Try to get license from npm registry
url := fmt.Sprintf("https://registry.npmjs.org/%s/latest", packageName)
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)
if err != nil {
@@ -641,15 +642,15 @@ func tryGetNpmLicense(packageName string) string {
func extractLicenseType(content string) string {
content = strings.ToUpper(content)
licensePatterns := map[string]*regexp.Regexp{
"MIT": regexp.MustCompile(`MIT\s+LICENSE`),
"Apache-2.0": regexp.MustCompile(`APACHE\s+LICENSE.*VERSION\s+2\.0`),
"GPL-3.0": regexp.MustCompile(`GNU\s+GENERAL\s+PUBLIC\s+LICENSE.*VERSION\s+3`),
"BSD-3": regexp.MustCompile(`BSD\s+3-CLAUSE`),
"BSD-2": regexp.MustCompile(`BSD\s+2-CLAUSE`),
"ISC": regexp.MustCompile(`ISC\s+LICENSE`),
"AGPL-3.0": regexp.MustCompile(`GNU\s+AFFERO\s+GENERAL\s+PUBLIC\s+LICENSE`),
"MIT": regexp.MustCompile(`MIT\s+LICENSE`),
"Apache-2.0": regexp.MustCompile(`APACHE\s+LICENSE.*VERSION\s+2\.0`),
"GPL-3.0": regexp.MustCompile(`GNU\s+GENERAL\s+PUBLIC\s+LICENSE.*VERSION\s+3`),
"BSD-3": regexp.MustCompile(`BSD\s+3-CLAUSE`),
"BSD-2": regexp.MustCompile(`BSD\s+2-CLAUSE`),
"ISC": regexp.MustCompile(`ISC\s+LICENSE`),
"AGPL-3.0": regexp.MustCompile(`GNU\s+AFFERO\s+GENERAL\s+PUBLIC\s+LICENSE`),
}
for license, pattern := range licensePatterns {
@@ -664,32 +665,32 @@ func extractLicenseType(content string) string {
func detectCommonLicense(modulePath string) string {
// Common patterns for detecting license types based on module paths
commonLicenses := map[string]string{
"golang.org/x": "BSD-3-Clause",
"google.golang.org": "Apache-2.0",
"gopkg.in": "Various",
"go.uber.org": "MIT",
"go.etcd.io": "Apache-2.0",
"go.mongodb.org": "Apache-2.0",
"go.opentelemetry.io": "Apache-2.0",
"k8s.io": "Apache-2.0",
"sigs.k8s.io": "Apache-2.0",
"cloud.google.com": "Apache-2.0",
"go.opencensus.io": "Apache-2.0",
"contrib.go.opencensus.io": "Apache-2.0",
"github.com/golang/": "BSD-3-Clause",
"github.com/google/": "Apache-2.0",
"golang.org/x": "BSD-3-Clause",
"google.golang.org": "Apache-2.0",
"gopkg.in": "Various",
"go.uber.org": "MIT",
"go.etcd.io": "Apache-2.0",
"go.mongodb.org": "Apache-2.0",
"go.opentelemetry.io": "Apache-2.0",
"k8s.io": "Apache-2.0",
"sigs.k8s.io": "Apache-2.0",
"cloud.google.com": "Apache-2.0",
"go.opencensus.io": "Apache-2.0",
"contrib.go.opencensus.io": "Apache-2.0",
"github.com/golang/": "BSD-3-Clause",
"github.com/google/": "Apache-2.0",
"github.com/grpc-ecosystem/": "Apache-2.0",
"github.com/prometheus/": "Apache-2.0",
"github.com/coreos/": "Apache-2.0",
"github.com/etcd-io/": "Apache-2.0",
"github.com/go-kit/": "MIT",
"github.com/sirupsen/": "MIT",
"github.com/stretchr/": "MIT",
"github.com/spf13/": "Apache-2.0",
"github.com/gorilla/": "BSD-3-Clause",
"github.com/gin-gonic/": "MIT",
"github.com/labstack/": "MIT",
"github.com/julienschmidt/": "BSD-2-Clause",
"github.com/prometheus/": "Apache-2.0",
"github.com/coreos/": "Apache-2.0",
"github.com/etcd-io/": "Apache-2.0",
"github.com/go-kit/": "MIT",
"github.com/sirupsen/": "MIT",
"github.com/stretchr/": "MIT",
"github.com/spf13/": "Apache-2.0",
"github.com/gorilla/": "BSD-3-Clause",
"github.com/gin-gonic/": "MIT",
"github.com/labstack/": "MIT",
"github.com/julienschmidt/": "BSD-2-Clause",
}
for prefix, license := range commonLicenses {
@@ -707,12 +708,12 @@ func getGoVersion() string {
if err != nil {
return "Unknown"
}
// Parse "go version go1.21.5 darwin/amd64" to extract "go1.21.5"
parts := strings.Fields(string(output))
if len(parts) >= 3 {
return parts[2] // "go1.21.5"
}
return "Unknown"
}
}
-5
View File
@@ -1,5 +0,0 @@
{
"dependencies": {
"@vueuse/router": "^13.8.0"
}
}
-238
View File
@@ -1,238 +0,0 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
'@vueuse/router':
specifier: ^13.8.0
version: 13.8.0(vue-router@4.5.1(vue@3.5.18))(vue@3.5.18)
packages:
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.27.1':
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.28.3':
resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/types@7.28.2':
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'}
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@vue/compiler-core@3.5.18':
resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==}
'@vue/compiler-dom@3.5.18':
resolution: {integrity: sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==}
'@vue/compiler-sfc@3.5.18':
resolution: {integrity: sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==}
'@vue/compiler-ssr@3.5.18':
resolution: {integrity: sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
'@vue/reactivity@3.5.18':
resolution: {integrity: sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==}
'@vue/runtime-core@3.5.18':
resolution: {integrity: sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==}
'@vue/runtime-dom@3.5.18':
resolution: {integrity: sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==}
'@vue/server-renderer@3.5.18':
resolution: {integrity: sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==}
peerDependencies:
vue: 3.5.18
'@vue/shared@3.5.18':
resolution: {integrity: sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==}
'@vueuse/router@13.8.0':
resolution: {integrity: sha512-h9pT7ryg9eMbs0eprE+nKmER3oGiMMm0hT4PQKY9hkZ70oedZhPXPA2GM2TOcg+qg2/o953WVRYzxB7HpoT6FQ==}
peerDependencies:
vue: ^3.5.0
vue-router: ^4.0.0
'@vueuse/shared@13.8.0':
resolution: {integrity: sha512-x4nfM0ykW+RmNJ4/1IzZsuLuWWrNTxlTWUiehTGI54wnOxIgI9EDdu/O5S77ac6hvQ3hk2KpOVFHaM0M796Kbw==}
peerDependencies:
vue: ^3.5.0
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
vue-router@4.5.1:
resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==}
peerDependencies:
vue: ^3.2.0
vue@3.5.18:
resolution: {integrity: sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
snapshots:
'@babel/helper-string-parser@7.27.1': {}
'@babel/helper-validator-identifier@7.27.1': {}
'@babel/parser@7.28.3':
dependencies:
'@babel/types': 7.28.2
'@babel/types@7.28.2':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
'@jridgewell/sourcemap-codec@1.5.5': {}
'@vue/compiler-core@3.5.18':
dependencies:
'@babel/parser': 7.28.3
'@vue/shared': 3.5.18
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.5.18':
dependencies:
'@vue/compiler-core': 3.5.18
'@vue/shared': 3.5.18
'@vue/compiler-sfc@3.5.18':
dependencies:
'@babel/parser': 7.28.3
'@vue/compiler-core': 3.5.18
'@vue/compiler-dom': 3.5.18
'@vue/compiler-ssr': 3.5.18
'@vue/shared': 3.5.18
estree-walker: 2.0.2
magic-string: 0.30.17
postcss: 8.5.6
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.18':
dependencies:
'@vue/compiler-dom': 3.5.18
'@vue/shared': 3.5.18
'@vue/devtools-api@6.6.4': {}
'@vue/reactivity@3.5.18':
dependencies:
'@vue/shared': 3.5.18
'@vue/runtime-core@3.5.18':
dependencies:
'@vue/reactivity': 3.5.18
'@vue/shared': 3.5.18
'@vue/runtime-dom@3.5.18':
dependencies:
'@vue/reactivity': 3.5.18
'@vue/runtime-core': 3.5.18
'@vue/shared': 3.5.18
csstype: 3.1.3
'@vue/server-renderer@3.5.18(vue@3.5.18)':
dependencies:
'@vue/compiler-ssr': 3.5.18
'@vue/shared': 3.5.18
vue: 3.5.18
'@vue/shared@3.5.18': {}
'@vueuse/router@13.8.0(vue-router@4.5.1(vue@3.5.18))(vue@3.5.18)':
dependencies:
'@vueuse/shared': 13.8.0(vue@3.5.18)
vue: 3.5.18
vue-router: 4.5.1(vue@3.5.18)
'@vueuse/shared@13.8.0(vue@3.5.18)':
dependencies:
vue: 3.5.18
csstype@3.1.3: {}
entities@4.5.0: {}
estree-walker@2.0.2: {}
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
nanoid@3.3.11: {}
picocolors@1.1.1: {}
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
source-map-js@1.2.1: {}
vue-router@4.5.1(vue@3.5.18):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.18
vue@3.5.18:
dependencies:
'@vue/compiler-dom': 3.5.18
'@vue/compiler-sfc': 3.5.18
'@vue/runtime-dom': 3.5.18
'@vue/server-renderer': 3.5.18(vue@3.5.18)
'@vue/shared': 3.5.18