mirror of
https://github.com/gotoeasy/glogcenter.git
synced 2025-09-15 12:58:34 +08:00
Web前端检索,适当重构
This commit is contained in:
parent
3c01d88abd
commit
a4afc1837d
3
.gitignore
vendored
3
.gitignore
vendored
@ -13,3 +13,6 @@
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
||||
/**/dist/
|
||||
/**/node_modules/
|
||||
|
||||
@ -145,3 +145,41 @@ func GeyStoreNameByDate(name string) string {
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
func EndwithsRune(str string, endstr string) bool {
|
||||
|
||||
if endstr == "" || str == endstr {
|
||||
return true
|
||||
}
|
||||
|
||||
strs := []rune(str)
|
||||
ends := []rune(endstr)
|
||||
lens := len(strs)
|
||||
lene := len(ends)
|
||||
if lens < lene {
|
||||
return false
|
||||
}
|
||||
|
||||
dif := lens - lene
|
||||
for i := lene - 1; i >= 0; i-- {
|
||||
if strs[dif+i] != ends[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func SubStringRune(str string, start int, end int) string {
|
||||
srune := []rune(str)
|
||||
slen := len(srune)
|
||||
if start >= slen || start >= end || start < 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
rs := ""
|
||||
for i := start; i < slen && i < end; i++ {
|
||||
rs += string(srune[i])
|
||||
}
|
||||
return rs
|
||||
}
|
||||
|
||||
@ -32,6 +32,10 @@ func NewHttpRequest(c *gin.Context) *HttpRequest {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *HttpRequest) SetHeader(key string, value string) {
|
||||
r.ginCtx.Header(key, value)
|
||||
}
|
||||
|
||||
func (r *HttpRequest) GetHeader(name string) string {
|
||||
ary := r.mapHead[strings.ToLower(name)]
|
||||
if ary == nil {
|
||||
@ -59,3 +63,23 @@ func (r *HttpRequest) GetFormParameter(name string) string {
|
||||
func (r *HttpRequest) Redirect(url string) {
|
||||
r.ginCtx.Redirect(http.StatusMovedPermanently, url)
|
||||
}
|
||||
|
||||
func (r *HttpRequest) ResponseData(code int, contentType string, bytes []byte) {
|
||||
r.ginCtx.Data(code, contentType, bytes)
|
||||
}
|
||||
|
||||
func (r *HttpRequest) GetMethod() string {
|
||||
return r.ginCtx.Request.Method
|
||||
}
|
||||
|
||||
func (r *HttpRequest) AbortWithStatus(code int) {
|
||||
r.ginCtx.AbortWithStatus(code)
|
||||
}
|
||||
|
||||
func (r *HttpRequest) RequestURI() string {
|
||||
return r.ginCtx.Request.RequestURI
|
||||
}
|
||||
|
||||
func (r *HttpRequest) RequestUrlPath() string {
|
||||
return r.ginCtx.Request.URL.Path
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package gweb
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"glc/cmn"
|
||||
"glc/ldb/conf"
|
||||
"glc/onexit"
|
||||
"log"
|
||||
@ -19,6 +20,12 @@ func Run() {
|
||||
|
||||
ginEngine := gin.Default()
|
||||
|
||||
// ginEngine.GET("/assets/*filepath", func(c *gin.Context) {
|
||||
// staticServer := http.FileServer(http.FS(assets.Static))
|
||||
// c.Request.URL = &url.URL{Path: "web/dist" + c.Request.RequestURI}
|
||||
// staticServer.ServeHTTP(c.Writer, c.Request)
|
||||
// })
|
||||
|
||||
ginEngine.NoRoute(func(c *gin.Context) {
|
||||
req := NewHttpRequest(c)
|
||||
|
||||
@ -32,8 +39,21 @@ func Run() {
|
||||
}
|
||||
}
|
||||
|
||||
// controller
|
||||
// 静态文件
|
||||
path := strings.ToLower(c.Request.URL.Path)
|
||||
if cmn.EndwithsRune(path, ".html") {
|
||||
path = "/**/*.html"
|
||||
} else if cmn.EndwithsRune(path, ".css") {
|
||||
path = "/**/*.css"
|
||||
} else if cmn.EndwithsRune(path, ".js") {
|
||||
path = "/**/*.js"
|
||||
} else if cmn.EndwithsRune(path, ".png") {
|
||||
path = "/**/*.png"
|
||||
} else if cmn.EndwithsRune(path, ".ico") {
|
||||
path = "/**/*.ico"
|
||||
}
|
||||
|
||||
// controller
|
||||
method := strings.ToUpper(c.Request.Method)
|
||||
handle := getHttpController(method, path)
|
||||
if handle == nil {
|
||||
|
||||
@ -28,15 +28,15 @@ func init() {
|
||||
|
||||
func UpdateConfigByEnv() {
|
||||
// 读取环境变量初始化配置,各配置都有默认值
|
||||
storeRoot = Getenv("GLC_STORE_ROOT", "/glogcenter") // 存储根目录
|
||||
storeChanLength = GetenvInt("GLC_STORE_CHAN_LENGTH", 64) // 存储通道长度
|
||||
maxIdleTime = GetenvInt("GLC_MAX_IDLE_TIME", 180) // 最大闲置时间(秒),超过闲置时间将自动关闭,0时表示不关闭
|
||||
storeNameAutoAddDate = GetenvBool("GLC_STORE_NAME_AUTO_ADD_DATE", true) // 存储名是否自动添加日期(日志量大通常按日单位区分存储),默认true
|
||||
serverPort = GetenvInt("GLC_SERVER_PORT", 8080) // web服务端口
|
||||
contextPath = Getenv("GLC_CONTEXT_PATH", "/glc") // web服务contextPath
|
||||
enableSecurityKey = GetenvBool("GLC_ENABLE_SECURITY_KEY", false) // web服务是否开启API秘钥校验,默认false
|
||||
headerSecurityKey = Getenv("GLC_HEADER_SECURITY_KEY", "X-GLC-AUTH") // web服务API秘钥的header键名
|
||||
securityKey = Getenv("GLC_SECURITY_KEY", "glogcenter") // web服务API秘钥
|
||||
storeRoot = Getenv("GLC_STORE_ROOT", "/glogcenter") // 存储根目录
|
||||
storeChanLength = GetenvInt("GLC_STORE_CHAN_LENGTH", 64) // 存储通道长度
|
||||
maxIdleTime = GetenvInt("GLC_MAX_IDLE_TIME", 180) // 最大闲置时间(秒),超过闲置时间将自动关闭,0时表示不关闭
|
||||
storeNameAutoAddDate = GetenvBool("GLC_STORE_NAME_AUTO_ADD_DATE", false) // 存储名是否自动添加日期(日志量大通常按日单位区分存储),默认true
|
||||
serverPort = GetenvInt("GLC_SERVER_PORT", 8080) // web服务端口
|
||||
contextPath = Getenv("GLC_CONTEXT_PATH", "/glc") // web服务contextPath
|
||||
enableSecurityKey = GetenvBool("GLC_ENABLE_SECURITY_KEY", false) // web服务是否开启API秘钥校验,默认false
|
||||
headerSecurityKey = Getenv("GLC_HEADER_SECURITY_KEY", "X-GLC-AUTH") // web服务API秘钥的header键名
|
||||
securityKey = Getenv("GLC_SECURITY_KEY", "glogcenter") // web服务API秘钥
|
||||
}
|
||||
|
||||
// 取配置: web服务API秘钥的header键名,可通过环境变量“GLC_HEADER_SECURITY_KEY”设定,默认值“X-GLC-AUTH”
|
||||
|
||||
@ -34,8 +34,8 @@ func NewDefaultEngine() *Engine {
|
||||
}
|
||||
|
||||
// 添加日志
|
||||
func (e *Engine) AddTextLog(logText string) {
|
||||
e.logStorage.AddTextLog(logText)
|
||||
func (e *Engine) AddTextLog(date string, logText string, system string) {
|
||||
e.logStorage.AddTextLog(date, logText, system)
|
||||
}
|
||||
|
||||
func (e *Engine) Search(searchKey string, pageSize int, currentDocId uint64, forward bool) *search.SearchResult {
|
||||
|
||||
@ -3,16 +3,15 @@ package ldb
|
||||
import (
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Test_all(t *testing.T) {
|
||||
|
||||
engine := NewDefaultEngine()
|
||||
for i := 1; i <= 10000; i++ {
|
||||
engine.AddTextLog(` java.sql.SQLException: ddduse them aalav`)
|
||||
}
|
||||
time.Sleep(time.Duration(5) * time.Second)
|
||||
// for i := 1; i <= 10000; i++ {
|
||||
// engine.AddTextLog(` java.sql.SQLException: ddduse them aalav`)
|
||||
// }
|
||||
// time.Sleep(time.Duration(5) * time.Second)
|
||||
|
||||
// for i := 1; i <= 10000; i++ {
|
||||
// engine.AddTextLog(` java.sql.SQLException: them aalav`)
|
||||
@ -24,7 +23,7 @@ func Test_all(t *testing.T) {
|
||||
// }
|
||||
// time.Sleep(time.Duration(5) * time.Second)
|
||||
|
||||
rs := engine.Search(` them java `, 20, 0, true)
|
||||
rs := engine.Search(` them java ddduse `, 5, 0, true)
|
||||
log.Println("共查到", rs.Total, "件")
|
||||
for _, v := range rs.Data {
|
||||
log.Println(v.Id, v.Text)
|
||||
|
||||
@ -173,7 +173,7 @@ func createInvertedIndex(s *LogDataStorage) int {
|
||||
idx := NewWordIndexStorage(s.StoreName(), word)
|
||||
idx.Add(cmn.StringToUint64(m.Id, 36, 0)) // 日志ID加入索引
|
||||
}
|
||||
log.Println("创建日志索引:", m.Id)
|
||||
log.Println("创建日志索引:", cmn.StringToUint64(m.Id, 36, 0))
|
||||
|
||||
// 保存索引信息
|
||||
mnt.AddKeyWords(kws) // 关键词信息
|
||||
|
||||
@ -41,7 +41,7 @@ func NewLogDataStorageHandle(storeName string) *LogDataStorageHandle {
|
||||
}
|
||||
|
||||
// 添加日志(参数是普通文本日志)
|
||||
func (s *LogDataStorageHandle) AddTextLog(logText string) {
|
||||
func (s *LogDataStorageHandle) AddTextLog(date string, logText string, system string) {
|
||||
txt := strings.TrimSpace(logText)
|
||||
if txt == "" {
|
||||
return
|
||||
@ -53,6 +53,8 @@ func (s *LogDataStorageHandle) AddTextLog(logText string) {
|
||||
if len(ary) > 1 {
|
||||
d.Detail = txt
|
||||
}
|
||||
d.Date = date
|
||||
d.System = system
|
||||
|
||||
if s.storage.IsClose() {
|
||||
s.storage = NewLogDataStorage(s.storage.storeName, "data")
|
||||
|
||||
@ -146,5 +146,5 @@ func GetSearchKey(searchKey string) string {
|
||||
|
||||
// TODO
|
||||
log.Println("搜索关键词", kws, "优化后搜索", rs)
|
||||
return rs[0]
|
||||
return strings.Join(rs, " ")
|
||||
}
|
||||
|
||||
@ -1,10 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"glc/gweb/http"
|
||||
"glc/web/router"
|
||||
)
|
||||
import "glc/onstart"
|
||||
|
||||
func main() {
|
||||
http.StartHttpServer(router.Register)
|
||||
onstart.Run()
|
||||
}
|
||||
|
||||
40
glc/onstart/onstart.go
Normal file
40
glc/onstart/onstart.go
Normal file
@ -0,0 +1,40 @@
|
||||
package onstart
|
||||
|
||||
import (
|
||||
"glc/gweb"
|
||||
"glc/gweb/http"
|
||||
"glc/gweb/method"
|
||||
"glc/ldb/conf"
|
||||
"glc/www/controller"
|
||||
"glc/www/filter"
|
||||
"glc/www/html"
|
||||
)
|
||||
|
||||
func Run() {
|
||||
|
||||
http.StartHttpServer(func() {
|
||||
|
||||
contextPath := conf.GetContextPath() // ContextPath
|
||||
|
||||
// 过滤器
|
||||
gweb.RegisterFilter(filter.ApiKeyFilter)
|
||||
gweb.RegisterFilter(filter.CrossFilter)
|
||||
|
||||
// 控制器(跳转)
|
||||
gweb.RegisterController(method.GET, "/", html.RedirectToHomeController)
|
||||
gweb.RegisterController(method.GET, contextPath, html.RedirectToHomeController)
|
||||
|
||||
// Html静态文件
|
||||
gweb.RegisterController(method.GET, contextPath+"/", html.HomeIndexHtmlController)
|
||||
gweb.RegisterController(method.GET, "/**/*.html", html.StaticFileController)
|
||||
gweb.RegisterController(method.GET, "/**/*.css", html.StaticFileController)
|
||||
gweb.RegisterController(method.GET, "/**/*.js", html.StaticFileController)
|
||||
gweb.RegisterController(method.GET, "/**/*.ico", html.StaticFileController)
|
||||
gweb.RegisterController(method.GET, "/**/*.png", html.StaticFileController)
|
||||
|
||||
// 控制器
|
||||
gweb.RegisterController(method.POST, contextPath+"/search", controller.LogSearchController)
|
||||
gweb.RegisterController(method.POST, contextPath+"/add", controller.LogAddController)
|
||||
|
||||
})
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
package filter
|
||||
|
||||
import (
|
||||
"glc/gweb"
|
||||
"glc/ldb/conf"
|
||||
)
|
||||
|
||||
// 校验HEADER的API秘钥
|
||||
func ApiKeyFilter(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
|
||||
// 开启API秘钥校验时才检查
|
||||
if !conf.IsEnableSecurityKey() {
|
||||
return nil
|
||||
}
|
||||
|
||||
auth := req.GetHeader(conf.GetHeaderSecurityKey())
|
||||
if auth != conf.GetSecurityKey() {
|
||||
return gweb.Error(403, "未经授权的访问,拒绝服务")
|
||||
}
|
||||
return nil // 返回nil表示正常过滤成功
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"glc/gweb"
|
||||
"glc/gweb/method"
|
||||
"glc/ldb/conf"
|
||||
"glc/web/controller"
|
||||
"glc/web/filter"
|
||||
)
|
||||
|
||||
func Register() {
|
||||
|
||||
// ContextPath
|
||||
contextPath := conf.GetContextPath()
|
||||
|
||||
// 过滤器
|
||||
gweb.RegisterFilter(filter.ApiKeyFilter)
|
||||
|
||||
// 控制器器(跳转)
|
||||
gweb.RegisterController(method.GET, "/", controller.RedirectToSearchController)
|
||||
gweb.RegisterController(method.GET, contextPath, controller.RedirectToSearchController)
|
||||
gweb.RegisterController(method.GET, contextPath+"/", controller.RedirectToSearchController)
|
||||
|
||||
// 控制器
|
||||
gweb.RegisterController(method.POST, contextPath+"/search", controller.LogSearchController)
|
||||
gweb.RegisterController(method.POST, contextPath+"/add", controller.LogAddController)
|
||||
|
||||
}
|
||||
12
glc/www/controller/admin_controller.go
Normal file
12
glc/www/controller/admin_controller.go
Normal file
@ -0,0 +1,12 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"glc/gweb"
|
||||
"glc/ldb/conf"
|
||||
)
|
||||
|
||||
// 前端检索页面
|
||||
func AdminController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
defer req.Redirect(conf.GetContextPath() + "/search")
|
||||
return nil
|
||||
}
|
||||
@ -9,8 +9,10 @@ import (
|
||||
func LogAddController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
storeNmae := req.GetFormParameter("name")
|
||||
text := req.GetFormParameter("text")
|
||||
date := req.GetFormParameter("date")
|
||||
system := req.GetFormParameter("system")
|
||||
|
||||
engine := ldb.NewEngine(storeNmae)
|
||||
engine.AddTextLog(text)
|
||||
engine.AddTextLog(date, text, system)
|
||||
return gweb.Ok()
|
||||
}
|
||||
@ -4,25 +4,18 @@ import (
|
||||
"glc/cmn"
|
||||
"glc/gweb"
|
||||
"glc/ldb"
|
||||
"glc/ldb/conf"
|
||||
"glc/ldb/tokenizer"
|
||||
)
|
||||
|
||||
// 日志检索(表单提交方式)
|
||||
func LogSearchController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
storeNmae := req.GetFormParameter("name")
|
||||
searchKey := tokenizer.GetSearchKey(req.GetFormParameter("searchKey"))
|
||||
//searchKey := tokenizer.GetSearchKey(req.GetFormParameter("searchKey"))
|
||||
searchKey := req.GetFormParameter("searchKey")
|
||||
pageSize := cmn.StringToInt(req.GetFormParameter("pageSize"), 20)
|
||||
currentId := cmn.StringToUint64(req.GetFormParameter("currentId"), 36, 0)
|
||||
forward := cmn.StringToBool(req.GetFormParameter("forward"), true)
|
||||
|
||||
eng := ldb.NewEngine(storeNmae)
|
||||
rs := eng.Search(searchKey, pageSize, currentId, forward)
|
||||
return gweb.Result(rs)
|
||||
}
|
||||
|
||||
// 重定向
|
||||
func RedirectToSearchController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
defer req.Redirect(conf.GetContextPath() + "/search")
|
||||
return nil
|
||||
return gweb.Result(rs.Data)
|
||||
}
|
||||
39
glc/www/filter/filter.go
Normal file
39
glc/www/filter/filter.go
Normal file
@ -0,0 +1,39 @@
|
||||
package filter
|
||||
|
||||
import (
|
||||
"glc/gweb"
|
||||
"glc/ldb/conf"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// 校验HEADER的API秘钥
|
||||
func ApiKeyFilter(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
|
||||
//log.Println("================================", req.RequestURI())
|
||||
// 开启API秘钥校验时才检查
|
||||
if !conf.IsEnableSecurityKey() {
|
||||
return nil
|
||||
}
|
||||
|
||||
auth := req.GetHeader(conf.GetHeaderSecurityKey())
|
||||
if auth != conf.GetSecurityKey() {
|
||||
return gweb.Error(403, "未经授权的访问,拒绝服务")
|
||||
}
|
||||
return nil // 返回nil表示正常过滤成功
|
||||
}
|
||||
|
||||
// 校验HEADER的API秘钥
|
||||
func CrossFilter(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
|
||||
req.SetHeader("Access-Control-Allow-Origin", "*")
|
||||
req.SetHeader("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")
|
||||
req.SetHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
|
||||
req.SetHeader("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
|
||||
req.SetHeader("Access-Control-Allow-Credentials", "true")
|
||||
|
||||
//放行所有OPTIONS方法
|
||||
if req.GetMethod() == "OPTIONS" {
|
||||
req.AbortWithStatus(http.StatusNoContent)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
66
glc/www/html/static_file_handle.go
Normal file
66
glc/www/html/static_file_handle.go
Normal file
@ -0,0 +1,66 @@
|
||||
package html
|
||||
|
||||
import (
|
||||
"glc/cmn"
|
||||
"glc/gweb"
|
||||
"glc/ldb/conf"
|
||||
"glc/www"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
// [/]重定向到[/glc/]
|
||||
func RedirectToHomeController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
defer req.Redirect(conf.GetContextPath() + "/")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 响应请求[/glc/],读取index.html返回
|
||||
func HomeIndexHtmlController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
file, err := www.Static.ReadFile("web/dist/index.html")
|
||||
if err != nil && os.IsNotExist(err) {
|
||||
req.ResponseData(404, "text/html", cmn.StringToBytes("not found"))
|
||||
} else {
|
||||
req.ResponseData(200, "text/html", file)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 响应 *.html/*.css/*.js/*.png 等静态文件请求
|
||||
func StaticFileController(req *gweb.HttpRequest) *gweb.HttpResult {
|
||||
|
||||
urlPath := req.RequestUrlPath()
|
||||
contentType := getContentType(urlPath)
|
||||
file, err := www.Static.ReadFile(getStaticFilePath(urlPath))
|
||||
if err != nil && os.IsNotExist(err) {
|
||||
req.ResponseData(404, contentType, cmn.StringToBytes("not found"))
|
||||
} else {
|
||||
req.ResponseData(200, contentType, file)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// urlPath如[/glc/assets/index.f0b375ee.js]
|
||||
func getStaticFilePath(urlPath string) string {
|
||||
path := cmn.SubStringRune(urlPath, len(conf.GetContextPath()), len(urlPath))
|
||||
return "web/dist" + path
|
||||
}
|
||||
|
||||
func getContentType(urlPath string) string {
|
||||
|
||||
if cmn.EndwithsRune(urlPath, ".html") {
|
||||
return "text/html"
|
||||
} else if cmn.EndwithsRune(urlPath, ".css") {
|
||||
return "text/css"
|
||||
} else if cmn.EndwithsRune(urlPath, ".js") {
|
||||
return "application/x-javascript"
|
||||
} else if cmn.EndwithsRune(urlPath, ".png") {
|
||||
return "image/png"
|
||||
} else if cmn.EndwithsRune(urlPath, ".ico") {
|
||||
return "image/x-icon"
|
||||
} else {
|
||||
log.Println("未识别出ContentType,按text/html处理", urlPath)
|
||||
return "text/html"
|
||||
}
|
||||
|
||||
}
|
||||
75
glc/www/web/index.html
Normal file
75
glc/www/web/index.html
Normal file
@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<link rel="icon" href="/favicon.ico"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>日志中心</title>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
body, html {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
*[v-cloak]{
|
||||
display: none;
|
||||
}
|
||||
#app {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#app .el-container{
|
||||
height: 100%;
|
||||
}
|
||||
#app .el-menu{
|
||||
border-right:none;
|
||||
}
|
||||
.menubar {
|
||||
background-color: #fff;
|
||||
width: auto;
|
||||
height: 100%;
|
||||
transition: width .2s;
|
||||
overflow: hidden;
|
||||
border-right: solid 1px;
|
||||
border-color: lightgray;
|
||||
}
|
||||
.main{
|
||||
background-color:#edf0f3;
|
||||
}
|
||||
/* html.dark .el-card {
|
||||
--el-card-bg-color: var(--el-bg-color-overlay);
|
||||
}
|
||||
html.dark .main{
|
||||
background-color: var(--el-bg-color-overlay);
|
||||
}
|
||||
|
||||
html.dark .database .active,html.dark .database .item:hover{
|
||||
background-color:#262727;
|
||||
} */
|
||||
|
||||
ul.el-menu--collapse{
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
div.el-card__body{
|
||||
padding-top: 0px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
div.el-table td.el-table__cell{
|
||||
padding: 3px 0;
|
||||
}
|
||||
|
||||
main.el-main{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
24
glc/www/web/package.json
Normal file
24
glc/www/web/package.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "web",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^1.1.4",
|
||||
"@vueuse/core": "^8.4.2",
|
||||
"axios": "^0.27.2",
|
||||
"element-plus": "^2.1.11",
|
||||
"sass": "^1.51.0",
|
||||
"vue": "^3.2.25",
|
||||
"vue-json-viewer": "3",
|
||||
"vue-router": "^4.0.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^2.2.0",
|
||||
"vite": "^2.8.0"
|
||||
}
|
||||
}
|
||||
BIN
glc/www/web/public/favicon.ico
Normal file
BIN
glc/www/web/public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
BIN
glc/www/web/public/glc.png
Normal file
BIN
glc/www/web/public/glc.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
glc/www/web/public/title.png
Normal file
BIN
glc/www/web/public/title.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
67
glc/www/web/src/App.vue
Normal file
67
glc/www/web/src/App.vue
Normal file
@ -0,0 +1,67 @@
|
||||
|
||||
<template>
|
||||
<el-container>
|
||||
<el-container>
|
||||
|
||||
<el-header style="display:flex;justify-content: space-between;border-bottom: 1px solid lightgray;height:52px;">
|
||||
|
||||
<div style="display:flex;align-items: center" class="header-logo-title">
|
||||
<div style="text-align:center;width: 34px;color:white;cursor:pointer;" @click="clickLogo">
|
||||
<img src="/glc.png" style="width:34px;margin-top:9px;"/>
|
||||
</div>
|
||||
<div style="text-align:center;">
|
||||
<img src="/title.png" style="margin-top:11px;margin-left:26px;height:32px"/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-header>
|
||||
|
||||
<el-aside class="menubar x-menubar" style="width:48px">
|
||||
<Menu :isCollapsed="true"></Menu>
|
||||
</el-aside>
|
||||
|
||||
<el-main class="main x-main" >
|
||||
<router-view></router-view>
|
||||
</el-main>
|
||||
|
||||
</el-container>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Menu from './components/Menu.vue'
|
||||
import { Expand, Fold } from '@element-plus/icons-vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Fold,
|
||||
Expand,
|
||||
Menu,
|
||||
},
|
||||
data() {
|
||||
},
|
||||
methods: {
|
||||
clickLogo() {
|
||||
location.href = "https://github.com/gotoeasy/glogcenter"
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.x-menubar{
|
||||
position: fixed;
|
||||
top: 52px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.main.x-main{
|
||||
margin-left: 48px;
|
||||
padding-left: 0px;
|
||||
padding-top: 20px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
|
||||
.header-logo-title{
|
||||
margin-left: -14px;
|
||||
}
|
||||
</style>
|
||||
50
glc/www/web/src/api.js
Normal file
50
glc/www/web/src/api.js
Normal file
@ -0,0 +1,50 @@
|
||||
import axios from 'axios'
|
||||
|
||||
const BASE_URL = process.env.NODE_ENV === 'production' ? location.origin : 'http://127.0.0.1:8080'
|
||||
|
||||
function request(url, method = 'get', data) {
|
||||
return axios({
|
||||
baseURL: BASE_URL,
|
||||
url: url,
|
||||
method: method,
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
function post(url, formData) {
|
||||
return axios.post(url,formData,{
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
// 'X-GLC-AUTH': 'glogcenter',
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export default {
|
||||
search(params={}) {
|
||||
|
||||
let formData = new FormData();
|
||||
for(let k in params){
|
||||
formData.append(k, params[k]);
|
||||
}
|
||||
return post(`${BASE_URL}/glc/search`, formData)
|
||||
},
|
||||
// remove(db, id) {
|
||||
// return request(`/remove?database=${db}`, 'post', { id })
|
||||
// },
|
||||
// gc() {
|
||||
// return request('/gc')
|
||||
// },
|
||||
// getStatus() {
|
||||
// return request('/status')
|
||||
// },
|
||||
// addIndex(db, index) {
|
||||
// return request(`/index?database=${db}`, 'post', index )
|
||||
// },
|
||||
// drop(db){
|
||||
// return request(`/db/drop?database=${db}`)
|
||||
// },
|
||||
// create(db){
|
||||
// return request(`/db/create?database=${db}`)
|
||||
// }
|
||||
}
|
||||
24
glc/www/web/src/components/Icon.vue
Normal file
24
glc/www/web/src/components/Icon.vue
Normal file
@ -0,0 +1,24 @@
|
||||
<script>
|
||||
import { h } from 'vue'
|
||||
import { ElIcon } from 'element-plus'
|
||||
export default {
|
||||
name: 'Icon',
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
color:{
|
||||
type:String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
render() {
|
||||
return h(ElIcon, {},[h(this.name,{color:this.color})])
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
84
glc/www/web/src/components/Menu.vue
Normal file
84
glc/www/web/src/components/Menu.vue
Normal file
@ -0,0 +1,84 @@
|
||||
<template>
|
||||
<!-- <div style="text-align:center;width: 200px;color:white" v-if="!isCollapsed">
|
||||
<svg t="1652075159972" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="6654" width="50" height="50"
|
||||
>
|
||||
<path
|
||||
d="M501.76 402.432c-39.936 9.216-67.584 16.384-108.544 28.672-9.216 1.024-9.216 4.096-19.456-6.144-9.216-12.288-16.384-16.384-30.72-24.576-39.936-19.456-79.872-13.312-116.736 9.216-44.032 28.672-65.536 68.608-65.536 120.832 0 50.176 36.864 93.184 87.04 101.376 44.032 6.144 79.872-9.216 108.544-43.008 6.144-7.168 12.288-15.36 16.384-22.528H248.832c-13.312 0-16.384-7.168-12.288-19.456 7.168-19.456 22.528-52.224 31.744-68.608 1.024-4.096 6.144-9.216 15.36-9.216h234.496c1.024 18.432 1.024 34.816-1.024 52.224-7.168 46.08-24.576 89.088-52.224 125.952-46.08 59.392-105.472 98.304-182.272 108.544-61.44 7.168-120.832-4.096-171.008-43.008-50.176-37.888-73.728-83.968-81.92-143.36-7.168-68.608 12.288-133.12 53.248-186.368 46.08-59.392 105.472-96.256 179.2-110.592 59.392-12.288 117.76-4.096 169.984 30.72 34.816 22.528 58.368 52.224 73.728 90.112 6.144 5.12 3.072 8.192-4.096 9.216z m211.968 354.304c-58.368-1.024-111.616-16.384-156.672-56.32-37.888-31.744-61.44-73.728-68.608-123.904-12.288-71.68 7.168-138.24 52.224-192.512 46.08-61.44 102.4-93.184 179.2-105.472 65.536-12.288 126.976-6.144 182.272 31.744 50.176 34.816 80.896 80.896 90.112 142.336 12.288 87.04-13.312 156.672-73.728 216.064-43.008 43.008-95.232 68.608-153.6 80.896-18.432 5.12-35.84 5.12-51.2 7.168z m150.528-259.072c0-7.168 0-15.36-1.024-21.504-12.288-64.512-68.608-98.304-132.096-83.968-59.392 13.312-98.304 50.176-111.616 111.616-12.288 50.176 13.312 101.376 58.368 120.832 34.816 15.36 68.608 13.312 104.448-4.096 53.248-26.624 80.896-66.56 81.92-122.88z"
|
||||
fill="#2DBCAF" p-id="6655"
|
||||
></path>
|
||||
</svg>
|
||||
<h1 style="margin-top:0px;">GoFound Admin</h1>
|
||||
</div> -->
|
||||
<el-menu
|
||||
:default-active="active+''"
|
||||
:collapse="isCollapsed"
|
||||
class="el-menu-vertical-demo"
|
||||
background-color="rgb(249,251,253)"
|
||||
text-color="#0081dd"
|
||||
active-text-color="#0081dd"
|
||||
>
|
||||
|
||||
<router-link v-for="(item,index) in menus" :to="{name:item.name}" :key="item.name">
|
||||
<el-menu-item :index="index">
|
||||
<Icon :name="item.icon" :color="item.color" class="side-menu-icon"/>
|
||||
<!-- <span v-text="item.label"></span> -->
|
||||
</el-menu-item>
|
||||
</router-link>
|
||||
|
||||
</el-menu>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Document, Service } from '@element-plus/icons-vue'
|
||||
import menus from '../menus'
|
||||
import Icon from './Icon.vue'
|
||||
|
||||
export default {
|
||||
name: 'Menu',
|
||||
components: { Icon, Service, Document },
|
||||
props: {
|
||||
isCollapsed: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
menus: menus,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
active() {
|
||||
let active = 0
|
||||
this.menus.forEach((item, index) => {
|
||||
if (item.name === this.$route.name) {
|
||||
active = index
|
||||
}
|
||||
})
|
||||
return active
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
openDocument() {
|
||||
window.open('https://gitee.com/tompeppa/gofound')
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.el-menu a{
|
||||
text-decoration: none;
|
||||
}
|
||||
.el-menu-item{
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-bottom:solid 1px lightgray;
|
||||
background-color: white;
|
||||
color: #0081dd;
|
||||
}
|
||||
.side-menu-icon{
|
||||
margin-left: -9px;
|
||||
}
|
||||
</style>
|
||||
20
glc/www/web/src/main.js
Normal file
20
glc/www/web/src/main.js
Normal file
@ -0,0 +1,20 @@
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import 'element-plus/dist/index.css'
|
||||
import ElementPlus from 'element-plus'
|
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
||||
|
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
|
||||
import router from './router'
|
||||
let app = createApp(App)
|
||||
app.use(ElementPlus,{
|
||||
locale: zhCn,
|
||||
})
|
||||
app.use(router)
|
||||
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
||||
app.component(key, component)
|
||||
app.use(component)
|
||||
}
|
||||
|
||||
app.mount('#app')
|
||||
13
glc/www/web/src/menus.js
Normal file
13
glc/www/web/src/menus.js
Normal file
@ -0,0 +1,13 @@
|
||||
import { Coin, DataLine, Document, Search } from '@element-plus/icons-vue'
|
||||
|
||||
const menus = [
|
||||
{
|
||||
path: '/',
|
||||
name: 'dashboard',
|
||||
icon: Search,
|
||||
label: '日志检索',
|
||||
color: '#0081dd',
|
||||
component: () => import('./views/dashboard.vue'),
|
||||
},
|
||||
]
|
||||
export default menus
|
||||
10
glc/www/web/src/router.js
Normal file
10
glc/www/web/src/router.js
Normal file
@ -0,0 +1,10 @@
|
||||
import { createRouter, createWebHashHistory } from 'vue-router'
|
||||
|
||||
import menus from './menus'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
routes: menus
|
||||
})
|
||||
|
||||
export default router
|
||||
177
glc/www/web/src/views/dashboard.vue
Normal file
177
glc/www/web/src/views/dashboard.vue
Normal file
@ -0,0 +1,177 @@
|
||||
<template>
|
||||
<el-container>
|
||||
|
||||
<el-main style="padding-top:0">
|
||||
<div id="dashboard">
|
||||
<el-card>
|
||||
<template #header>
|
||||
|
||||
<div class="header">
|
||||
<div style="display:flex;justify-content:space-between;">
|
||||
<div>
|
||||
<el-input @keyup.enter="search()" v-model="params.searchKey" placeholder="请输入关键词检索" style="width:600px">
|
||||
<template #append>
|
||||
<el-button type="primary" @click="search()" class="x-search">全文检索</el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<el-table :stripe="true" v-loading="loading" :data="data" :height="tableHeight" ref="table" style="width: 100%">
|
||||
|
||||
<el-table-column fixed type="expand" width="60">
|
||||
<template #default="scope">
|
||||
<div class="x-detail">
|
||||
<el-scrollbar :class="{'x-scrollbar':(scope.row.detail && scope.row.detail.split('\n').length>20)}">
|
||||
<div v-html="scope.row.detail"></div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column prop="id" label="ID" width="80"/> -->
|
||||
<!-- <el-table-column prop="system" label="系统" width="100"/> -->
|
||||
<el-table-column prop="date" label="日期时间" width="208"/>
|
||||
<el-table-column prop="text" label="内容">
|
||||
<template #default="scope">
|
||||
<span v-html="scope.row.text"></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</el-card>
|
||||
</div>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import api from '../api'
|
||||
//import jsonViewer from 'vue-json-viewer'
|
||||
|
||||
export default {
|
||||
name: 'dashboard',
|
||||
components: { },
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
tableHeight: (window.innerHeight - 177) + 'px',
|
||||
params: {
|
||||
storeName: '',
|
||||
searchKey: '',
|
||||
pageSize: 100,
|
||||
currentId: '',
|
||||
forward: true,
|
||||
},
|
||||
data: [],
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
|
||||
// 自适应表格高度
|
||||
let that = this;
|
||||
window.onresize = () => {
|
||||
that.tableHeight = (window.innerHeight - 177) + 'px';
|
||||
};
|
||||
|
||||
//
|
||||
let scrollWrap = document.querySelector('.el-scrollbar__wrap')
|
||||
scrollWrap.addEventListener('scroll', function(e) {
|
||||
// e.target.scrollTop 为0时是滚动到顶部,不触发自动加载前一页数据,重新检索吧
|
||||
let scrollDistance = e.target.scrollHeight - e.target.scrollTop - e.target.clientHeight
|
||||
if (scrollDistance <= 0) {
|
||||
that.searchMore(); // 滚动到了底部,自动加载后一页
|
||||
}
|
||||
})
|
||||
|
||||
this.search()
|
||||
|
||||
},
|
||||
methods: {
|
||||
searchMore() {
|
||||
if (this.data.length>10000) {
|
||||
console.info("当前表格数据已达1万条,不再自动加载数据了")
|
||||
return
|
||||
}
|
||||
let params = Object.assign({}, this.params);
|
||||
params.forward = true
|
||||
params.currentId = this.data[this.data.length-1].id; // 相对最后条id,继续找后面的日志
|
||||
|
||||
api.search(params).then(rs => {
|
||||
let res = rs.data
|
||||
if (res.success && res.result.length) {
|
||||
this.data.push(...res.result)
|
||||
}
|
||||
})
|
||||
},
|
||||
search() {
|
||||
this.loading = true
|
||||
|
||||
//console.info("----------this.params",this.params)
|
||||
this.params.currentId = ''
|
||||
api.search(this.params).then(rs => {
|
||||
let res = rs.data
|
||||
if (res.success) {
|
||||
this.data = res.result;
|
||||
document.querySelector('.el-scrollbar__wrap').scrollTop = 0; // 滚动到顶部
|
||||
}
|
||||
}).finally(() => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
getTableHeight() {
|
||||
let tableH = window.innerHeight - 142;
|
||||
},
|
||||
}
|
||||
,
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.database .item {
|
||||
line-height: 35px;
|
||||
border-bottom: 1px solid var(--el-card-border-color);
|
||||
cursor: pointer;
|
||||
transition: background-color .3s;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.database .item:hover {
|
||||
background-color: #f3f6f9;
|
||||
}
|
||||
|
||||
.database .item .name {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
|
||||
.database .active {
|
||||
background-color: #fef5ea;
|
||||
color: var(--el-color-primary);
|
||||
}
|
||||
button.el-button.x-search{
|
||||
background-color: #0081dd;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.x-detail{
|
||||
padding-top:5px;
|
||||
padding-left:30px;
|
||||
padding-bottom:5px;
|
||||
background-color: floralwhite;
|
||||
}
|
||||
.x-scrollbar{
|
||||
height:420px;
|
||||
}
|
||||
|
||||
</style>
|
||||
8
glc/www/web/vite.config.js
Normal file
8
glc/www/web/vite.config.js
Normal file
@ -0,0 +1,8 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
base: ''
|
||||
})
|
||||
691
glc/www/web/yarn.lock
Normal file
691
glc/www/web/yarn.lock
Normal file
@ -0,0 +1,691 @@
|
||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@babel/parser@^7.16.4":
|
||||
version "7.17.10"
|
||||
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz"
|
||||
integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==
|
||||
|
||||
"@ctrl/tinycolor@^3.4.1":
|
||||
version "3.4.1"
|
||||
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz"
|
||||
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
|
||||
|
||||
"@element-plus/icons-vue@^1.1.4":
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-1.1.4.tgz"
|
||||
integrity sha512-Iz/nHqdp1sFPmdzRwHkEQQA3lKvoObk8azgABZ81QUOpW9s/lUyQVUSh0tNtEPZXQlKwlSh7SPgoVxzrE0uuVQ==
|
||||
|
||||
"@floating-ui/core@^0.6.2":
|
||||
version "0.6.2"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-0.6.2.tgz"
|
||||
integrity sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==
|
||||
|
||||
"@floating-ui/dom@^0.4.5":
|
||||
version "0.4.5"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-0.4.5.tgz"
|
||||
integrity sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==
|
||||
dependencies:
|
||||
"@floating-ui/core" "^0.6.2"
|
||||
|
||||
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.6":
|
||||
version "2.11.7"
|
||||
resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
|
||||
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
|
||||
|
||||
"@types/lodash-es@^4.17.6":
|
||||
version "4.17.6"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.6.tgz"
|
||||
integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==
|
||||
dependencies:
|
||||
"@types/lodash" "*"
|
||||
|
||||
"@types/lodash@*", "@types/lodash@^4.14.182":
|
||||
version "4.14.182"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.182.tgz"
|
||||
integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
|
||||
|
||||
"@vitejs/plugin-vue@^2.2.0":
|
||||
version "2.3.2"
|
||||
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.2.tgz"
|
||||
integrity sha512-umyypfSHS4kQLdYAnJHhaASq7FRzNCdvcRoQ3uYGNk1/M4a+hXUd7ysN7BLhCrWH6uBokyCkFeUAaFDzSaaSrQ==
|
||||
|
||||
"@vue/compiler-core@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.33.tgz"
|
||||
integrity sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.4"
|
||||
"@vue/shared" "3.2.33"
|
||||
estree-walker "^2.0.2"
|
||||
source-map "^0.6.1"
|
||||
|
||||
"@vue/compiler-dom@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz"
|
||||
integrity sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==
|
||||
dependencies:
|
||||
"@vue/compiler-core" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
|
||||
"@vue/compiler-sfc@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz"
|
||||
integrity sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.4"
|
||||
"@vue/compiler-core" "3.2.33"
|
||||
"@vue/compiler-dom" "3.2.33"
|
||||
"@vue/compiler-ssr" "3.2.33"
|
||||
"@vue/reactivity-transform" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
estree-walker "^2.0.2"
|
||||
magic-string "^0.25.7"
|
||||
postcss "^8.1.10"
|
||||
source-map "^0.6.1"
|
||||
|
||||
"@vue/compiler-ssr@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz"
|
||||
integrity sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==
|
||||
dependencies:
|
||||
"@vue/compiler-dom" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
|
||||
"@vue/devtools-api@^6.0.0":
|
||||
version "6.1.4"
|
||||
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz"
|
||||
integrity sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==
|
||||
|
||||
"@vue/reactivity-transform@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz"
|
||||
integrity sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.4"
|
||||
"@vue/compiler-core" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
estree-walker "^2.0.2"
|
||||
magic-string "^0.25.7"
|
||||
|
||||
"@vue/reactivity@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.33.tgz"
|
||||
integrity sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==
|
||||
dependencies:
|
||||
"@vue/shared" "3.2.33"
|
||||
|
||||
"@vue/runtime-core@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.33.tgz"
|
||||
integrity sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==
|
||||
dependencies:
|
||||
"@vue/reactivity" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
|
||||
"@vue/runtime-dom@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz"
|
||||
integrity sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==
|
||||
dependencies:
|
||||
"@vue/runtime-core" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
csstype "^2.6.8"
|
||||
|
||||
"@vue/server-renderer@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.33.tgz"
|
||||
integrity sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==
|
||||
dependencies:
|
||||
"@vue/compiler-ssr" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
|
||||
"@vue/shared@3.2.33":
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.2.33.tgz"
|
||||
integrity sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==
|
||||
|
||||
"@vueuse/core@^8.2.6", "@vueuse/core@^8.4.2":
|
||||
version "8.4.2"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-8.4.2.tgz"
|
||||
integrity sha512-dUVU96lii1ZdWoNJXauQNt+4QrHz1DKbuW+y6pDR2N10q7rGZJMDU7pQeMcC2XeosX7kMODfaBuqsF03NozzLg==
|
||||
dependencies:
|
||||
"@vueuse/metadata" "8.4.2"
|
||||
"@vueuse/shared" "8.4.2"
|
||||
vue-demi "*"
|
||||
|
||||
"@vueuse/metadata@8.4.2":
|
||||
version "8.4.2"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-8.4.2.tgz"
|
||||
integrity sha512-2BIj++7P0/I5dfMsEe8q7Kw0HqVAjVcyNOd9+G22/ILUC9TVLTeYOuJ1kwa1Gpr+0LWKHc6GqHiLWNL33+exoQ==
|
||||
|
||||
"@vueuse/shared@8.4.2":
|
||||
version "8.4.2"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-8.4.2.tgz"
|
||||
integrity sha512-hILXMEjL8YQhj1LHN/HZ49UThyfk8irTjhele2nW+L3N55ElFUBGB/f4w0rg8EW+/suhqv7kJJPTZzvHCqxlIw==
|
||||
dependencies:
|
||||
vue-demi "*"
|
||||
|
||||
anymatch@~3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz"
|
||||
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
|
||||
dependencies:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
async-validator@^4.0.7:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.1.1.tgz"
|
||||
integrity sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz"
|
||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||
|
||||
axios@^0.27.2:
|
||||
version "0.27.2"
|
||||
resolved "https://registry.npmmirror.com/axios/-/axios-0.27.2.tgz"
|
||||
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
|
||||
dependencies:
|
||||
follow-redirects "^1.14.9"
|
||||
form-data "^4.0.0"
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
|
||||
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||
|
||||
braces@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
dependencies:
|
||||
fill-range "^7.0.1"
|
||||
|
||||
"chokidar@>=3.0.0 <4.0.0":
|
||||
version "3.5.3"
|
||||
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz"
|
||||
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||
dependencies:
|
||||
anymatch "~3.1.2"
|
||||
braces "~3.0.2"
|
||||
glob-parent "~5.1.2"
|
||||
is-binary-path "~2.1.0"
|
||||
is-glob "~4.0.1"
|
||||
normalize-path "~3.0.0"
|
||||
readdirp "~3.6.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
clipboard@^2.0.4:
|
||||
version "2.0.11"
|
||||
resolved "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz"
|
||||
integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==
|
||||
dependencies:
|
||||
good-listener "^1.2.2"
|
||||
select "^1.1.2"
|
||||
tiny-emitter "^2.0.0"
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
csstype@^2.6.8:
|
||||
version "2.6.20"
|
||||
resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz"
|
||||
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
|
||||
|
||||
dayjs@^1.11.1:
|
||||
version "1.11.2"
|
||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.2.tgz"
|
||||
integrity sha512-F4LXf1OeU9hrSYRPTTj/6FbO4HTjPKXvEIC1P2kcnFurViINCVk3ZV0xAS3XVx9MkMsXbbqlK6hjseaYbgKEHw==
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
|
||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||
|
||||
delegate@^3.1.2:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz"
|
||||
integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
|
||||
|
||||
element-plus@^2.1.11:
|
||||
version "2.1.11"
|
||||
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.1.11.tgz"
|
||||
integrity sha512-s4X0I8s787tv+9UdekBC1g7v42Fj4bucPAmu03EjbgrGrV7BJvkoBGuK52lNfu4yC76bl6Uyjesd5Fu8CMakSw==
|
||||
dependencies:
|
||||
"@ctrl/tinycolor" "^3.4.1"
|
||||
"@element-plus/icons-vue" "^1.1.4"
|
||||
"@floating-ui/dom" "^0.4.5"
|
||||
"@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.6"
|
||||
"@types/lodash" "^4.14.182"
|
||||
"@types/lodash-es" "^4.17.6"
|
||||
"@vueuse/core" "^8.2.6"
|
||||
async-validator "^4.0.7"
|
||||
dayjs "^1.11.1"
|
||||
escape-html "^1.0.3"
|
||||
lodash "^4.17.21"
|
||||
lodash-es "^4.17.21"
|
||||
lodash-unified "^1.0.2"
|
||||
memoize-one "^6.0.0"
|
||||
normalize-wheel-es "^1.1.2"
|
||||
|
||||
esbuild-android-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64"
|
||||
integrity sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==
|
||||
|
||||
esbuild-android-arm64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz#78acc80773d16007de5219ccce544c036abd50b8"
|
||||
integrity sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==
|
||||
|
||||
esbuild-darwin-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz#e02b1291f629ebdc2aa46fabfacc9aa28ff6aa46"
|
||||
integrity sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==
|
||||
|
||||
esbuild-darwin-arm64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz"
|
||||
integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==
|
||||
|
||||
esbuild-freebsd-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz#790b8786729d4aac7be17648f9ea8e0e16475b5e"
|
||||
integrity sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==
|
||||
|
||||
esbuild-freebsd-arm64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz#b66340ab28c09c1098e6d9d8ff656db47d7211e6"
|
||||
integrity sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==
|
||||
|
||||
esbuild-linux-32@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz#7927f950986fd39f0ff319e92839455912b67f70"
|
||||
integrity sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==
|
||||
|
||||
esbuild-linux-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz#4893d07b229d9cfe34a2b3ce586399e73c3ac519"
|
||||
integrity sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==
|
||||
|
||||
esbuild-linux-arm64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz#8442402e37d0b8ae946ac616784d9c1a2041056a"
|
||||
integrity sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==
|
||||
|
||||
esbuild-linux-arm@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz#d5dbf32d38b7f79be0ec6b5fb2f9251fd9066986"
|
||||
integrity sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==
|
||||
|
||||
esbuild-linux-mips64le@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz#95081e42f698bbe35d8ccee0e3a237594b337eb5"
|
||||
integrity sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==
|
||||
|
||||
esbuild-linux-ppc64le@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz#dceb0a1b186f5df679618882a7990bd422089b47"
|
||||
integrity sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==
|
||||
|
||||
esbuild-linux-riscv64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz#61fb8edb75f475f9208c4a93ab2bfab63821afd2"
|
||||
integrity sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==
|
||||
|
||||
esbuild-linux-s390x@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz#34c7126a4937406bf6a5e69100185fd702d12fe0"
|
||||
integrity sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==
|
||||
|
||||
esbuild-netbsd-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz#322ea9937d9e529183ee281c7996b93eb38a5d95"
|
||||
integrity sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==
|
||||
|
||||
esbuild-openbsd-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz#1ca29bb7a2bf09592dcc26afdb45108f08a2cdbd"
|
||||
integrity sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==
|
||||
|
||||
esbuild-sunos-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz#c9446f7d8ebf45093e7bb0e7045506a88540019b"
|
||||
integrity sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==
|
||||
|
||||
esbuild-windows-32@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz#f8e9b4602fd0ccbd48e5c8d117ec0ba4040f2ad1"
|
||||
integrity sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==
|
||||
|
||||
esbuild-windows-64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz#280f58e69f78535f470905ce3e43db1746518107"
|
||||
integrity sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==
|
||||
|
||||
esbuild-windows-arm64@0.14.38:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz#d97e9ac0f95a4c236d9173fa9f86c983d6a53f54"
|
||||
integrity sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==
|
||||
|
||||
esbuild@^0.14.27:
|
||||
version "0.14.38"
|
||||
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz"
|
||||
integrity sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==
|
||||
optionalDependencies:
|
||||
esbuild-android-64 "0.14.38"
|
||||
esbuild-android-arm64 "0.14.38"
|
||||
esbuild-darwin-64 "0.14.38"
|
||||
esbuild-darwin-arm64 "0.14.38"
|
||||
esbuild-freebsd-64 "0.14.38"
|
||||
esbuild-freebsd-arm64 "0.14.38"
|
||||
esbuild-linux-32 "0.14.38"
|
||||
esbuild-linux-64 "0.14.38"
|
||||
esbuild-linux-arm "0.14.38"
|
||||
esbuild-linux-arm64 "0.14.38"
|
||||
esbuild-linux-mips64le "0.14.38"
|
||||
esbuild-linux-ppc64le "0.14.38"
|
||||
esbuild-linux-riscv64 "0.14.38"
|
||||
esbuild-linux-s390x "0.14.38"
|
||||
esbuild-netbsd-64 "0.14.38"
|
||||
esbuild-openbsd-64 "0.14.38"
|
||||
esbuild-sunos-64 "0.14.38"
|
||||
esbuild-windows-32 "0.14.38"
|
||||
esbuild-windows-64 "0.14.38"
|
||||
esbuild-windows-arm64 "0.14.38"
|
||||
|
||||
escape-html@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
|
||||
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
|
||||
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz"
|
||||
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
|
||||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
follow-redirects@^1.14.9:
|
||||
version "1.15.0"
|
||||
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.0.tgz"
|
||||
integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==
|
||||
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
fsevents@~2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
|
||||
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||
|
||||
function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
glob-parent@~5.1.2:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz"
|
||||
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
good-listener@^1.2.2:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz"
|
||||
integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==
|
||||
dependencies:
|
||||
delegate "^3.1.2"
|
||||
|
||||
has@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
|
||||
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
immutable@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/immutable/-/immutable-4.0.0.tgz"
|
||||
integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==
|
||||
|
||||
is-binary-path@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz"
|
||||
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||
dependencies:
|
||||
binary-extensions "^2.0.0"
|
||||
|
||||
is-core-module@^2.8.1:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz"
|
||||
integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz"
|
||||
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
|
||||
|
||||
is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz"
|
||||
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-number@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz"
|
||||
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||
|
||||
lodash-es@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash-unified@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.2.tgz"
|
||||
integrity sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==
|
||||
|
||||
lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
magic-string@^0.25.7:
|
||||
version "0.25.9"
|
||||
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz"
|
||||
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
|
||||
dependencies:
|
||||
sourcemap-codec "^1.4.8"
|
||||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
|
||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.12:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
nanoid@^3.3.3:
|
||||
version "3.3.4"
|
||||
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
|
||||
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||
|
||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz"
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
normalize-wheel-es@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz"
|
||||
integrity sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==
|
||||
|
||||
path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
picocolors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
postcss@^8.1.10, postcss@^8.4.13:
|
||||
version "8.4.13"
|
||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz"
|
||||
integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==
|
||||
dependencies:
|
||||
nanoid "^3.3.3"
|
||||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
readdirp@~3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
|
||||
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||
dependencies:
|
||||
picomatch "^2.2.1"
|
||||
|
||||
resolve@^1.22.0:
|
||||
version "1.22.0"
|
||||
resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz"
|
||||
integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
|
||||
dependencies:
|
||||
is-core-module "^2.8.1"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
rollup@^2.59.0:
|
||||
version "2.72.0"
|
||||
resolved "https://registry.npmjs.org/rollup/-/rollup-2.72.0.tgz"
|
||||
integrity sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
sass@^1.51.0:
|
||||
version "1.51.0"
|
||||
resolved "https://registry.npmmirror.com/sass/-/sass-1.51.0.tgz"
|
||||
integrity sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==
|
||||
dependencies:
|
||||
chokidar ">=3.0.0 <4.0.0"
|
||||
immutable "^4.0.0"
|
||||
source-map-js ">=0.6.2 <2.0.0"
|
||||
|
||||
select@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmmirror.com/select/-/select-1.1.2.tgz"
|
||||
integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
|
||||
|
||||
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
|
||||
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||
|
||||
source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
sourcemap-codec@^1.4.8:
|
||||
version "1.4.8"
|
||||
resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
|
||||
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
|
||||
|
||||
supports-preserve-symlinks-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
tiny-emitter@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
|
||||
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
|
||||
|
||||
to-regex-range@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz"
|
||||
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
vite@^2.8.0:
|
||||
version "2.9.8"
|
||||
resolved "https://registry.npmjs.org/vite/-/vite-2.9.8.tgz"
|
||||
integrity sha512-zsBGwn5UT3YS0NLSJ7hnR54+vUKfgzMUh/Z9CxF1YKEBVIe213+63jrFLmZphgGI5zXwQCSmqIdbPuE8NJywPw==
|
||||
dependencies:
|
||||
esbuild "^0.14.27"
|
||||
postcss "^8.4.13"
|
||||
resolve "^1.22.0"
|
||||
rollup "^2.59.0"
|
||||
optionalDependencies:
|
||||
fsevents "~2.3.2"
|
||||
|
||||
vue-demi@*:
|
||||
version "0.12.5"
|
||||
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.12.5.tgz"
|
||||
integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
|
||||
|
||||
vue-json-viewer@3:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npmmirror.com/vue-json-viewer/-/vue-json-viewer-3.0.4.tgz"
|
||||
integrity sha512-pnC080rTub6YjccthVSNQod2z9Sl5IUUq46srXtn6rxwhW8QM4rlYn+CTSLFKXWfw+N3xv77Cioxw7B4XUKIbQ==
|
||||
dependencies:
|
||||
clipboard "^2.0.4"
|
||||
|
||||
vue-router@^4.0.15:
|
||||
version "4.0.15"
|
||||
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.15.tgz"
|
||||
integrity sha512-xa+pIN9ZqORdIW1MkN2+d9Ui2pCM1b/UMgwYUCZOiFYHAvz/slKKBDha8DLrh5aCG/RibtrpyhKjKOZ85tYyWg==
|
||||
dependencies:
|
||||
"@vue/devtools-api" "^6.0.0"
|
||||
|
||||
vue@^3.2.25:
|
||||
version "3.2.33"
|
||||
resolved "https://registry.npmjs.org/vue/-/vue-3.2.33.tgz"
|
||||
integrity sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==
|
||||
dependencies:
|
||||
"@vue/compiler-dom" "3.2.33"
|
||||
"@vue/compiler-sfc" "3.2.33"
|
||||
"@vue/runtime-dom" "3.2.33"
|
||||
"@vue/server-renderer" "3.2.33"
|
||||
"@vue/shared" "3.2.33"
|
||||
8
glc/www/web_embed.go
Normal file
8
glc/www/web_embed.go
Normal file
@ -0,0 +1,8 @@
|
||||
package www
|
||||
|
||||
import "embed"
|
||||
|
||||
var (
|
||||
//go:embed web/dist/*
|
||||
Static embed.FS
|
||||
)
|
||||
Loading…
Reference in New Issue
Block a user