Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
健杭 徐
intern_project_frontend_backend
Commits
c0f46fb4
Commit
c0f46fb4
authored
Jun 05, 2025
by
健杭 徐
Browse files
finish all
parent
e9920f5a
Changes
25
Hide whitespace changes
Inline
Side-by-side
comment-system/config/config.yaml
0 → 100644
View file @
c0f46fb4
server
:
port
:
8080
timeout
:
5s
database
:
dsn
:
"
user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
comment-system/go.mod
0 → 100644
View file @
c0f46fb4
module comment-system
go 1.24.3
require (
github.com/gin-gonic/gin v1.10.1
github.com/lib/pq v1.10.9
)
require (
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.20.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
comment-system/go.sum
0 → 100644
View file @
c0f46fb4
github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.10.1 h1:T0ujvqyCSqRopADpgPgiTT63DUQVSfojyME59Ei63pQ=
github.com/gin-gonic/gin v1.10.1/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
comment-system/handlers/handlers.go
0 → 100644
View file @
c0f46fb4
package
handlers
import
(
"database/sql"
"net/http"
"strconv"
"github.com/gin-gonic/gin"
)
var
db
*
sql
.
DB
func
InitDB
(
database
*
sql
.
DB
)
{
db
=
database
}
type
Comment
struct
{
ID
int
`json:"id"`
Name
string
`json:"name"`
Content
string
`json:"content"`
CreatedAt
string
`json:"created_at"`
}
type
Response
struct
{
Code
int
`json:"code"`
Msg
string
`json:"msg"`
Data
interface
{}
`json:"data"`
}
// 获取评论
func
GetCommentsHandler
(
c
*
gin
.
Context
)
{
// 参数验证
page
,
err
:=
strconv
.
Atoi
(
c
.
DefaultQuery
(
"page"
,
"1"
))
if
err
!=
nil
||
page
<
1
{
page
=
1
}
size
,
err
:=
strconv
.
Atoi
(
c
.
DefaultQuery
(
"size"
,
"10"
))
if
err
!=
nil
||
size
<
-
1
{
size
=
10
}
// 查询总数
var
total
int
countQuery
:=
"SELECT COUNT(*) FROM comments"
err
=
db
.
QueryRow
(
countQuery
)
.
Scan
(
&
total
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusInternalServerError
,
gin
.
H
{
"code"
:
500
,
"msg"
:
"查询总数失败: "
+
err
.
Error
(),
})
return
}
// 构建查询
query
:=
"SELECT id, name, content, TO_CHAR(created_at, 'YYYY-MM-DD HH24:MI') AS created_at FROM comments"
args
:=
[]
interface
{}{}
// 始终排序
query
+=
" ORDER BY created_at DESC"
// 分页处理
if
size
!=
-
1
{
offset
:=
(
page
-
1
)
*
size
query
+=
" LIMIT $1 OFFSET $2"
args
=
append
(
args
,
size
,
offset
)
}
// 执行查询
rows
,
err
:=
db
.
Query
(
query
,
args
...
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusInternalServerError
,
gin
.
H
{
"code"
:
500
,
"msg"
:
"查询评论失败: "
+
err
.
Error
(),
})
return
}
defer
rows
.
Close
()
// 处理结果
var
comments
[]
Comment
for
rows
.
Next
()
{
var
comment
Comment
if
err
:=
rows
.
Scan
(
&
comment
.
ID
,
&
comment
.
Name
,
&
comment
.
Content
,
&
comment
.
CreatedAt
,
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusInternalServerError
,
gin
.
H
{
"code"
:
500
,
"msg"
:
"解析评论失败: "
+
err
.
Error
(),
})
return
}
comments
=
append
(
comments
,
comment
)
}
// 返回标准响应结构
c
.
JSON
(
http
.
StatusOK
,
gin
.
H
{
"code"
:
0
,
"msg"
:
"success"
,
"data"
:
gin
.
H
{
"total"
:
total
,
"comments"
:
comments
,
},
})
}
// 添加评论
func
AddCommentHandler
(
c
*
gin
.
Context
)
{
var
newComment
Comment
if
err
:=
c
.
ShouldBindJSON
(
&
newComment
);
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
400
,
Msg
:
"Invalid request"
})
return
}
// 插入数据库
var
id
int
err
:=
db
.
QueryRow
(
"INSERT INTO comments (name, content, created_at) VALUES ($1, $2, $3) RETURNING id"
,
newComment
.
Name
,
newComment
.
Content
,
newComment
.
CreatedAt
,
)
.
Scan
(
&
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
500
,
Msg
:
err
.
Error
()})
return
}
newComment
.
ID
=
id
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
0
,
Msg
:
"Comment added"
,
Data
:
newComment
,
})
}
// 删除评论
func
DeleteCommentHandler
(
c
*
gin
.
Context
)
{
id
,
err
:=
strconv
.
Atoi
(
c
.
Query
(
"id"
))
if
err
!=
nil
||
id
<=
0
{
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
400
,
Msg
:
"Invalid ID"
})
return
}
result
,
err
:=
db
.
Exec
(
"DELETE FROM comments WHERE id = $1"
,
id
)
if
err
!=
nil
{
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
500
,
Msg
:
err
.
Error
()})
return
}
rowsAffected
,
_
:=
result
.
RowsAffected
()
if
rowsAffected
==
0
{
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
404
,
Msg
:
"Comment not found"
})
return
}
c
.
JSON
(
http
.
StatusOK
,
Response
{
Code
:
0
,
Msg
:
"Comment deleted"
,
Data
:
nil
,
})
}
comment-system/main.go
0 → 100644
View file @
c0f46fb4
package
main
import
(
"comment-system/handlers"
"database/sql"
"fmt"
"log"
"github.com/gin-gonic/gin"
_
"github.com/lib/pq"
)
const
(
host
=
"localhost"
port
=
5432
user
=
"comments_user"
password
=
"secure_password"
dbname
=
"comments_db"
)
var
db
*
sql
.
DB
func
main
()
{
psqlInfo
:=
fmt
.
Sprintf
(
"host=%s port=%d user=%s password=%s dbname=%s sslmode=disable"
,
host
,
port
,
user
,
password
,
dbname
)
var
err
error
db
,
err
=
sql
.
Open
(
"postgres"
,
psqlInfo
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
defer
db
.
Close
()
err
=
db
.
Ping
()
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
handlers
.
InitDB
(
db
)
createTable
()
var
tableExists
bool
err
=
db
.
QueryRow
(
`
SELECT EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_name = 'comments'
)
`
)
.
Scan
(
&
tableExists
)
if
err
!=
nil
{
log
.
Fatal
(
"Table check failed: "
,
err
)
}
if
!
tableExists
{
log
.
Println
(
"Table 'comments' not found, creating..."
)
createTable
()
}
else
{
log
.
Println
(
"Table 'comments' already exists"
)
}
router
:=
gin
.
Default
()
router
.
Use
(
func
(
c
*
gin
.
Context
)
{
c
.
Writer
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
"*"
)
c
.
Writer
.
Header
()
.
Set
(
"Access-Control-Allow-Methods"
,
"GET, POST, OPTIONS"
)
c
.
Writer
.
Header
()
.
Set
(
"Access-Control-Allow-Headers"
,
"Content-Type"
)
if
c
.
Request
.
Method
==
"OPTIONS"
{
c
.
AbortWithStatus
(
204
)
return
}
c
.
Next
()
})
router
.
GET
(
"/comment/get"
,
handlers
.
GetCommentsHandler
)
router
.
POST
(
"/comment/add"
,
handlers
.
AddCommentHandler
)
router
.
POST
(
"/comment/delete"
,
handlers
.
DeleteCommentHandler
)
log
.
Println
(
"Server started on :8080"
)
log
.
Fatal
(
router
.
Run
(
":8080"
))
}
// 新增表创建函数
func
createTable
()
{
query
:=
`
CREATE TABLE IF NOT EXISTS comments (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`
_
,
err
:=
db
.
Exec
(
query
)
if
err
!=
nil
{
log
.
Fatalf
(
"创建表失败: %v
\n
请执行以下命令修复:
\n
GRANT USAGE, CREATE ON SCHEMA public TO comments_user;"
,
err
)
}
log
.
Println
(
"表 'comments' 创建成功"
)
}
comment-system/static/.gitignore
0 → 100644
View file @
c0f46fb4
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
comment-system/static/README.md
0 → 100644
View file @
c0f46fb4
```
cd comment
npm run dev
```
comment-system/static/eslint.config.js
0 → 100644
View file @
c0f46fb4
import
js
from
'
@eslint/js
'
import
globals
from
'
globals
'
import
reactHooks
from
'
eslint-plugin-react-hooks
'
import
reactRefresh
from
'
eslint-plugin-react-refresh
'
import
tseslint
from
'
typescript-eslint
'
export
default
tseslint
.
config
(
{
ignores
:
[
'
dist
'
]
},
{
extends
:
[
js
.
configs
.
recommended
,
...
tseslint
.
configs
.
recommended
],
files
:
[
'
**/*.{ts,tsx}
'
],
languageOptions
:
{
ecmaVersion
:
2020
,
globals
:
globals
.
browser
,
},
plugins
:
{
'
react-hooks
'
:
reactHooks
,
'
react-refresh
'
:
reactRefresh
,
},
rules
:
{
...
reactHooks
.
configs
.
recommended
.
rules
,
'
react-refresh/only-export-components
'
:
[
'
warn
'
,
{
allowConstantExport
:
true
},
],
},
},
)
comment-system/static/index.html
0 → 100644
View file @
c0f46fb4
<!doctype html>
<html
lang=
"en"
>
<head>
<meta
charset=
"UTF-8"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"/public/icon.jpg"
/>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
/>
<title>
Xanadu's Comment
</title>
</head>
<body>
<div
id=
"root"
></div>
<script
type=
"module"
src=
"/src/main.tsx"
></script>
<script
src=
"/src/load.js"
></script>
</body>
</html>
comment-system/static/package-lock.json
0 → 100644
View file @
c0f46fb4
{
"name"
:
"my-app"
,
"version"
:
"0.0.0"
,
"lockfileVersion"
:
3
,
"requires"
:
true
,
"packages"
:
{
""
:
{
"name"
:
"my-app"
,
"version"
:
"0.0.0"
,
"dependencies"
:
{
"date-fns"
:
"^4.1.0"
,
"react"
:
"^19.1.0"
,
"react-dom"
:
"^19.1.0"
},
"devDependencies"
:
{
"@eslint/js"
:
"^9.25.0"
,
"@types/react"
:
"^19.1.2"
,
"@types/react-dom"
:
"^19.1.2"
,
"@vitejs/plugin-react-swc"
:
"^3.9.0"
,
"eslint"
:
"^9.25.0"
,
"eslint-plugin-react-hooks"
:
"^5.2.0"
,
"eslint-plugin-react-refresh"
:
"^0.4.19"
,
"globals"
:
"^16.0.0"
,
"typescript"
:
"~5.8.3"
,
"typescript-eslint"
:
"^8.30.1"
,
"vite"
:
"^6.3.5"
}
},
"node_modules/@esbuild/aix-ppc64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz"
,
"integrity"
:
"sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q=="
,
"cpu"
:
[
"ppc64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"aix"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/android-arm"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz"
,
"integrity"
:
"sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ=="
,
"cpu"
:
[
"arm"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"android"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/android-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"android"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/android-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"android"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/darwin-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/darwin-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/freebsd-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"freebsd"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/freebsd-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"freebsd"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-arm"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz"
,
"integrity"
:
"sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ=="
,
"cpu"
:
[
"arm"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-ia32"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz"
,
"integrity"
:
"sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ=="
,
"cpu"
:
[
"ia32"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-loong64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz"
,
"integrity"
:
"sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA=="
,
"cpu"
:
[
"loong64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-mips64el"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz"
,
"integrity"
:
"sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg=="
,
"cpu"
:
[
"mips64el"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-ppc64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz"
,
"integrity"
:
"sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag=="
,
"cpu"
:
[
"ppc64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-riscv64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz"
,
"integrity"
:
"sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA=="
,
"cpu"
:
[
"riscv64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-s390x"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz"
,
"integrity"
:
"sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g=="
,
"cpu"
:
[
"s390x"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/linux-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/netbsd-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"netbsd"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/netbsd-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"netbsd"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/openbsd-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"openbsd"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/openbsd-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"openbsd"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/sunos-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"sunos"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/win32-arm64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz"
,
"integrity"
:
"sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/win32-ia32"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz"
,
"integrity"
:
"sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg=="
,
"cpu"
:
[
"ia32"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@esbuild/win32-x64"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz"
,
"integrity"
:
"sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
],
"engines"
:
{
"node"
:
">=18"
}
},
"node_modules/@eslint-community/eslint-utils"
:
{
"version"
:
"4.7.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz"
,
"integrity"
:
"sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"eslint-visitor-keys"
:
"^3.4.3"
},
"engines"
:
{
"node"
:
"^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
},
"peerDependencies"
:
{
"eslint"
:
"^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
"node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys"
:
{
"version"
:
"3.4.3"
,
"resolved"
:
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
,
"integrity"
:
"sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
"^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
}
},
"node_modules/@eslint-community/regexpp"
:
{
"version"
:
"4.12.1"
,
"resolved"
:
"https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz"
,
"integrity"
:
"sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
"^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/config-array"
:
{
"version"
:
"0.20.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz"
,
"integrity"
:
"sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@eslint/object-schema"
:
"^2.1.6"
,
"debug"
:
"^4.3.1"
,
"minimatch"
:
"^3.1.2"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/config-helpers"
:
{
"version"
:
"0.2.2"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz"
,
"integrity"
:
"sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core"
:
{
"version"
:
"0.14.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz"
,
"integrity"
:
"sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@types/json-schema"
:
"^7.0.15"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/eslintrc"
:
{
"version"
:
"3.3.1"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz"
,
"integrity"
:
"sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ajv"
:
"^6.12.4"
,
"debug"
:
"^4.3.2"
,
"espree"
:
"^10.0.1"
,
"globals"
:
"^14.0.0"
,
"ignore"
:
"^5.2.0"
,
"import-fresh"
:
"^3.2.1"
,
"js-yaml"
:
"^4.1.0"
,
"minimatch"
:
"^3.1.2"
,
"strip-json-comments"
:
"^3.1.1"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
}
},
"node_modules/@eslint/eslintrc/node_modules/globals"
:
{
"version"
:
"14.0.0"
,
"resolved"
:
"https://registry.npmjs.org/globals/-/globals-14.0.0.tgz"
,
"integrity"
:
"sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=18"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@eslint/js"
:
{
"version"
:
"9.27.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz"
,
"integrity"
:
"sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://eslint.org/donate"
}
},
"node_modules/@eslint/object-schema"
:
{
"version"
:
"2.1.6"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz"
,
"integrity"
:
"sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/plugin-kit"
:
{
"version"
:
"0.3.1"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz"
,
"integrity"
:
"sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@eslint/core"
:
"^0.14.0"
,
"levn"
:
"^0.4.1"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@humanfs/core"
:
{
"version"
:
"0.19.1"
,
"resolved"
:
"https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz"
,
"integrity"
:
"sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=18.18.0"
}
},
"node_modules/@humanfs/node"
:
{
"version"
:
"0.16.6"
,
"resolved"
:
"https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz"
,
"integrity"
:
"sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@humanfs/core"
:
"^0.19.1"
,
"@humanwhocodes/retry"
:
"^0.3.0"
},
"engines"
:
{
"node"
:
">=18.18.0"
}
},
"node_modules/@humanfs/node/node_modules/@humanwhocodes/retry"
:
{
"version"
:
"0.3.1"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz"
,
"integrity"
:
"sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=18.18"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/nzakas"
}
},
"node_modules/@humanwhocodes/module-importer"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
,
"integrity"
:
"sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=12.22"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/nzakas"
}
},
"node_modules/@humanwhocodes/retry"
:
{
"version"
:
"0.4.3"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz"
,
"integrity"
:
"sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=18.18"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/nzakas"
}
},
"node_modules/@nodelib/fs.scandir"
:
{
"version"
:
"2.1.5"
,
"resolved"
:
"https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
,
"integrity"
:
"sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@nodelib/fs.stat"
:
"2.0.5"
,
"run-parallel"
:
"^1.1.9"
},
"engines"
:
{
"node"
:
">= 8"
}
},
"node_modules/@nodelib/fs.stat"
:
{
"version"
:
"2.0.5"
,
"resolved"
:
"https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
,
"integrity"
:
"sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 8"
}
},
"node_modules/@nodelib/fs.walk"
:
{
"version"
:
"1.2.8"
,
"resolved"
:
"https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
,
"integrity"
:
"sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@nodelib/fs.scandir"
:
"2.1.5"
,
"fastq"
:
"^1.6.0"
},
"engines"
:
{
"node"
:
">= 8"
}
},
"node_modules/@rollup/rollup-android-arm-eabi"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz"
,
"integrity"
:
"sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A=="
,
"cpu"
:
[
"arm"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"android"
]
},
"node_modules/@rollup/rollup-android-arm64"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz"
,
"integrity"
:
"sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz"
,
"integrity"
:
"sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz"
,
"integrity"
:
"sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
]
},
"node_modules/@rollup/rollup-freebsd-arm64"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz"
,
"integrity"
:
"sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"freebsd"
]
},
"node_modules/@rollup/rollup-freebsd-x64"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz"
,
"integrity"
:
"sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"freebsd"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz"
,
"integrity"
:
"sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA=="
,
"cpu"
:
[
"arm"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz"
,
"integrity"
:
"sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg=="
,
"cpu"
:
[
"arm"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz"
,
"integrity"
:
"sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz"
,
"integrity"
:
"sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz"
,
"integrity"
:
"sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w=="
,
"cpu"
:
[
"loong64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz"
,
"integrity"
:
"sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg=="
,
"cpu"
:
[
"ppc64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz"
,
"integrity"
:
"sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A=="
,
"cpu"
:
[
"riscv64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz"
,
"integrity"
:
"sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A=="
,
"cpu"
:
[
"riscv64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz"
,
"integrity"
:
"sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw=="
,
"cpu"
:
[
"s390x"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz"
,
"integrity"
:
"sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz"
,
"integrity"
:
"sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz"
,
"integrity"
:
"sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz"
,
"integrity"
:
"sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ=="
,
"cpu"
:
[
"ia32"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz"
,
"integrity"
:
"sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
]
},
"node_modules/@swc/core"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core/-/core-1.11.24.tgz"
,
"integrity"
:
"sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg=="
,
"dev"
:
true
,
"hasInstallScript"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@swc/counter"
:
"^0.1.3"
,
"@swc/types"
:
"^0.1.21"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/swc"
},
"optionalDependencies"
:
{
"@swc/core-darwin-arm64"
:
"1.11.24"
,
"@swc/core-darwin-x64"
:
"1.11.24"
,
"@swc/core-linux-arm-gnueabihf"
:
"1.11.24"
,
"@swc/core-linux-arm64-gnu"
:
"1.11.24"
,
"@swc/core-linux-arm64-musl"
:
"1.11.24"
,
"@swc/core-linux-x64-gnu"
:
"1.11.24"
,
"@swc/core-linux-x64-musl"
:
"1.11.24"
,
"@swc/core-win32-arm64-msvc"
:
"1.11.24"
,
"@swc/core-win32-ia32-msvc"
:
"1.11.24"
,
"@swc/core-win32-x64-msvc"
:
"1.11.24"
},
"peerDependencies"
:
{
"@swc/helpers"
:
">=0.5.17"
},
"peerDependenciesMeta"
:
{
"@swc/helpers"
:
{
"optional"
:
true
}
}
},
"node_modules/@swc/core-darwin-arm64"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.24.tgz"
,
"integrity"
:
"sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-darwin-x64"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.24.tgz"
,
"integrity"
:
"sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-linux-arm-gnueabihf"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.24.tgz"
,
"integrity"
:
"sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw=="
,
"cpu"
:
[
"arm"
],
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-linux-arm64-gnu"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.24.tgz"
,
"integrity"
:
"sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-linux-arm64-musl"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.24.tgz"
,
"integrity"
:
"sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-linux-x64-gnu"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.24.tgz"
,
"integrity"
:
"sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-linux-x64-musl"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.24.tgz"
,
"integrity"
:
"sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"linux"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-win32-arm64-msvc"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.24.tgz"
,
"integrity"
:
"sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ=="
,
"cpu"
:
[
"arm64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-win32-ia32-msvc"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.24.tgz"
,
"integrity"
:
"sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ=="
,
"cpu"
:
[
"ia32"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/core-win32-x64-msvc"
:
{
"version"
:
"1.11.24"
,
"resolved"
:
"https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.24.tgz"
,
"integrity"
:
"sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w=="
,
"cpu"
:
[
"x64"
],
"dev"
:
true
,
"license"
:
"Apache-2.0 AND MIT"
,
"optional"
:
true
,
"os"
:
[
"win32"
],
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/@swc/counter"
:
{
"version"
:
"0.1.3"
,
"resolved"
:
"https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"
,
"integrity"
:
"sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
},
"node_modules/@swc/types"
:
{
"version"
:
"0.1.21"
,
"resolved"
:
"https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz"
,
"integrity"
:
"sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@swc/counter"
:
"^0.1.3"
}
},
"node_modules/@types/estree"
:
{
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz"
,
"integrity"
:
"sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@types/json-schema"
:
{
"version"
:
"7.0.15"
,
"resolved"
:
"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
,
"integrity"
:
"sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@types/react"
:
{
"version"
:
"19.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz"
,
"integrity"
:
"sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"csstype"
:
"^3.0.2"
}
},
"node_modules/@types/react-dom"
:
{
"version"
:
"19.1.5"
,
"resolved"
:
"https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.5.tgz"
,
"integrity"
:
"sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"@types/react"
:
"^19.0.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz"
,
"integrity"
:
"sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@eslint-community/regexpp"
:
"^4.10.0"
,
"@typescript-eslint/scope-manager"
:
"8.32.1"
,
"@typescript-eslint/type-utils"
:
"8.32.1"
,
"@typescript-eslint/utils"
:
"8.32.1"
,
"@typescript-eslint/visitor-keys"
:
"8.32.1"
,
"graphemer"
:
"^1.4.0"
,
"ignore"
:
"^7.0.0"
,
"natural-compare"
:
"^1.4.0"
,
"ts-api-utils"
:
"^2.1.0"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
},
"peerDependencies"
:
{
"@typescript-eslint/parser"
:
"^8.0.0 || ^8.0.0-alpha.0"
,
"eslint"
:
"^8.57.0 || ^9.0.0"
,
"typescript"
:
">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore"
:
{
"version"
:
"7.0.4"
,
"resolved"
:
"https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz"
,
"integrity"
:
"sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 4"
}
},
"node_modules/@typescript-eslint/parser"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz"
,
"integrity"
:
"sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@typescript-eslint/scope-manager"
:
"8.32.1"
,
"@typescript-eslint/types"
:
"8.32.1"
,
"@typescript-eslint/typescript-estree"
:
"8.32.1"
,
"@typescript-eslint/visitor-keys"
:
"8.32.1"
,
"debug"
:
"^4.3.4"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
},
"peerDependencies"
:
{
"eslint"
:
"^8.57.0 || ^9.0.0"
,
"typescript"
:
">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/scope-manager"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz"
,
"integrity"
:
"sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@typescript-eslint/types"
:
"8.32.1"
,
"@typescript-eslint/visitor-keys"
:
"8.32.1"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/type-utils"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz"
,
"integrity"
:
"sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@typescript-eslint/typescript-estree"
:
"8.32.1"
,
"@typescript-eslint/utils"
:
"8.32.1"
,
"debug"
:
"^4.3.4"
,
"ts-api-utils"
:
"^2.1.0"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
},
"peerDependencies"
:
{
"eslint"
:
"^8.57.0 || ^9.0.0"
,
"typescript"
:
">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/types"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz"
,
"integrity"
:
"sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
}
},
"node_modules/@typescript-eslint/typescript-estree"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz"
,
"integrity"
:
"sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@typescript-eslint/types"
:
"8.32.1"
,
"@typescript-eslint/visitor-keys"
:
"8.32.1"
,
"debug"
:
"^4.3.4"
,
"fast-glob"
:
"^3.3.2"
,
"is-glob"
:
"^4.0.3"
,
"minimatch"
:
"^9.0.4"
,
"semver"
:
"^7.6.0"
,
"ts-api-utils"
:
"^2.1.0"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
},
"peerDependencies"
:
{
"typescript"
:
">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
,
"integrity"
:
"sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"balanced-match"
:
"^1.0.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch"
:
{
"version"
:
"9.0.5"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz"
,
"integrity"
:
"sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"brace-expansion"
:
"^2.0.1"
},
"engines"
:
{
"node"
:
">=16 || 14 >=14.17"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/isaacs"
}
},
"node_modules/@typescript-eslint/utils"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz"
,
"integrity"
:
"sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@eslint-community/eslint-utils"
:
"^4.7.0"
,
"@typescript-eslint/scope-manager"
:
"8.32.1"
,
"@typescript-eslint/types"
:
"8.32.1"
,
"@typescript-eslint/typescript-estree"
:
"8.32.1"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
},
"peerDependencies"
:
{
"eslint"
:
"^8.57.0 || ^9.0.0"
,
"typescript"
:
">=4.8.4 <5.9.0"
}
},
"node_modules/@typescript-eslint/visitor-keys"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz"
,
"integrity"
:
"sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@typescript-eslint/types"
:
"8.32.1"
,
"eslint-visitor-keys"
:
"^4.2.0"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
}
},
"node_modules/@vitejs/plugin-react-swc"
:
{
"version"
:
"3.9.0"
,
"resolved"
:
"https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.9.0.tgz"
,
"integrity"
:
"sha512-jYFUSXhwMCYsh/aQTgSGLIN3Foz5wMbH9ahb0Zva//UzwZYbMiZd7oT3AU9jHT9DLswYDswsRwPU9jVF3yA48Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@swc/core"
:
"^1.11.21"
},
"peerDependencies"
:
{
"vite"
:
"^4 || ^5 || ^6"
}
},
"node_modules/acorn"
:
{
"version"
:
"8.14.1"
,
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz"
,
"integrity"
:
"sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"bin"
:
{
"acorn"
:
"bin/acorn"
},
"engines"
:
{
"node"
:
">=0.4.0"
}
},
"node_modules/acorn-jsx"
:
{
"version"
:
"5.3.2"
,
"resolved"
:
"https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
,
"integrity"
:
"sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"acorn"
:
"^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/ajv"
:
{
"version"
:
"6.12.6"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
,
"integrity"
:
"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"fast-json-stable-stringify"
:
"^2.0.0"
,
"json-schema-traverse"
:
"^0.4.1"
,
"uri-js"
:
"^4.2.2"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ansi-styles"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
,
"integrity"
:
"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"color-convert"
:
"^2.0.1"
},
"engines"
:
{
"node"
:
">=8"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/argparse"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
,
"integrity"
:
"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
,
"dev"
:
true
,
"license"
:
"Python-2.0"
},
"node_modules/balanced-match"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
,
"integrity"
:
"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/brace-expansion"
:
{
"version"
:
"1.1.11"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
,
"integrity"
:
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"balanced-match"
:
"^1.0.0"
,
"concat-map"
:
"0.0.1"
}
},
"node_modules/braces"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
,
"integrity"
:
"sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"fill-range"
:
"^7.1.1"
},
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/callsites"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
,
"integrity"
:
"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/chalk"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
,
"integrity"
:
"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ansi-styles"
:
"^4.1.0"
,
"supports-color"
:
"^7.1.0"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/color-convert"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"integrity"
:
"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"color-name"
:
"~1.1.4"
},
"engines"
:
{
"node"
:
">=7.0.0"
}
},
"node_modules/color-name"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
,
"integrity"
:
"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
"integrity"
:
"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/cross-spawn"
:
{
"version"
:
"7.0.6"
,
"resolved"
:
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
,
"integrity"
:
"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"path-key"
:
"^3.1.0"
,
"shebang-command"
:
"^2.0.0"
,
"which"
:
"^2.0.1"
},
"engines"
:
{
"node"
:
">= 8"
}
},
"node_modules/csstype"
:
{
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
,
"integrity"
:
"sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/date-fns"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz"
,
"integrity"
:
"sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="
,
"license"
:
"MIT"
,
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/kossnocorp"
}
},
"node_modules/debug"
:
{
"version"
:
"4.4.1"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.4.1.tgz"
,
"integrity"
:
"sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"ms"
:
"^2.1.3"
},
"engines"
:
{
"node"
:
">=6.0"
},
"peerDependenciesMeta"
:
{
"supports-color"
:
{
"optional"
:
true
}
}
},
"node_modules/deep-is"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
,
"integrity"
:
"sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/esbuild"
:
{
"version"
:
"0.25.4"
,
"resolved"
:
"https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz"
,
"integrity"
:
"sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q=="
,
"dev"
:
true
,
"hasInstallScript"
:
true
,
"license"
:
"MIT"
,
"bin"
:
{
"esbuild"
:
"bin/esbuild"
},
"engines"
:
{
"node"
:
">=18"
},
"optionalDependencies"
:
{
"@esbuild/aix-ppc64"
:
"0.25.4"
,
"@esbuild/android-arm"
:
"0.25.4"
,
"@esbuild/android-arm64"
:
"0.25.4"
,
"@esbuild/android-x64"
:
"0.25.4"
,
"@esbuild/darwin-arm64"
:
"0.25.4"
,
"@esbuild/darwin-x64"
:
"0.25.4"
,
"@esbuild/freebsd-arm64"
:
"0.25.4"
,
"@esbuild/freebsd-x64"
:
"0.25.4"
,
"@esbuild/linux-arm"
:
"0.25.4"
,
"@esbuild/linux-arm64"
:
"0.25.4"
,
"@esbuild/linux-ia32"
:
"0.25.4"
,
"@esbuild/linux-loong64"
:
"0.25.4"
,
"@esbuild/linux-mips64el"
:
"0.25.4"
,
"@esbuild/linux-ppc64"
:
"0.25.4"
,
"@esbuild/linux-riscv64"
:
"0.25.4"
,
"@esbuild/linux-s390x"
:
"0.25.4"
,
"@esbuild/linux-x64"
:
"0.25.4"
,
"@esbuild/netbsd-arm64"
:
"0.25.4"
,
"@esbuild/netbsd-x64"
:
"0.25.4"
,
"@esbuild/openbsd-arm64"
:
"0.25.4"
,
"@esbuild/openbsd-x64"
:
"0.25.4"
,
"@esbuild/sunos-x64"
:
"0.25.4"
,
"@esbuild/win32-arm64"
:
"0.25.4"
,
"@esbuild/win32-ia32"
:
"0.25.4"
,
"@esbuild/win32-x64"
:
"0.25.4"
}
},
"node_modules/escape-string-regexp"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
,
"integrity"
:
"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint"
:
{
"version"
:
"9.27.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz"
,
"integrity"
:
"sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@eslint-community/eslint-utils"
:
"^4.2.0"
,
"@eslint-community/regexpp"
:
"^4.12.1"
,
"@eslint/config-array"
:
"^0.20.0"
,
"@eslint/config-helpers"
:
"^0.2.1"
,
"@eslint/core"
:
"^0.14.0"
,
"@eslint/eslintrc"
:
"^3.3.1"
,
"@eslint/js"
:
"9.27.0"
,
"@eslint/plugin-kit"
:
"^0.3.1"
,
"@humanfs/node"
:
"^0.16.6"
,
"@humanwhocodes/module-importer"
:
"^1.0.1"
,
"@humanwhocodes/retry"
:
"^0.4.2"
,
"@types/estree"
:
"^1.0.6"
,
"@types/json-schema"
:
"^7.0.15"
,
"ajv"
:
"^6.12.4"
,
"chalk"
:
"^4.0.0"
,
"cross-spawn"
:
"^7.0.6"
,
"debug"
:
"^4.3.2"
,
"escape-string-regexp"
:
"^4.0.0"
,
"eslint-scope"
:
"^8.3.0"
,
"eslint-visitor-keys"
:
"^4.2.0"
,
"espree"
:
"^10.3.0"
,
"esquery"
:
"^1.5.0"
,
"esutils"
:
"^2.0.2"
,
"fast-deep-equal"
:
"^3.1.3"
,
"file-entry-cache"
:
"^8.0.0"
,
"find-up"
:
"^5.0.0"
,
"glob-parent"
:
"^6.0.2"
,
"ignore"
:
"^5.2.0"
,
"imurmurhash"
:
"^0.1.4"
,
"is-glob"
:
"^4.0.0"
,
"json-stable-stringify-without-jsonify"
:
"^1.0.1"
,
"lodash.merge"
:
"^4.6.2"
,
"minimatch"
:
"^3.1.2"
,
"natural-compare"
:
"^1.4.0"
,
"optionator"
:
"^0.9.3"
},
"bin"
:
{
"eslint"
:
"bin/eslint.js"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://eslint.org/donate"
},
"peerDependencies"
:
{
"jiti"
:
"*"
},
"peerDependenciesMeta"
:
{
"jiti"
:
{
"optional"
:
true
}
}
},
"node_modules/eslint-plugin-react-hooks"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz"
,
"integrity"
:
"sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=10"
},
"peerDependencies"
:
{
"eslint"
:
"^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
}
},
"node_modules/eslint-plugin-react-refresh"
:
{
"version"
:
"0.4.20"
,
"resolved"
:
"https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz"
,
"integrity"
:
"sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"eslint"
:
">=8.40"
}
},
"node_modules/eslint-scope"
:
{
"version"
:
"8.3.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz"
,
"integrity"
:
"sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"dependencies"
:
{
"esrecurse"
:
"^4.3.0"
,
"estraverse"
:
"^5.2.0"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
}
},
"node_modules/eslint-visitor-keys"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz"
,
"integrity"
:
"sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
}
},
"node_modules/espree"
:
{
"version"
:
"10.3.0"
,
"resolved"
:
"https://registry.npmjs.org/espree/-/espree-10.3.0.tgz"
,
"integrity"
:
"sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"dependencies"
:
{
"acorn"
:
"^8.14.0"
,
"acorn-jsx"
:
"^5.3.2"
,
"eslint-visitor-keys"
:
"^4.2.0"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
}
},
"node_modules/esquery"
:
{
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz"
,
"integrity"
:
"sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="
,
"dev"
:
true
,
"license"
:
"BSD-3-Clause"
,
"dependencies"
:
{
"estraverse"
:
"^5.1.0"
},
"engines"
:
{
"node"
:
">=0.10"
}
},
"node_modules/esrecurse"
:
{
"version"
:
"4.3.0"
,
"resolved"
:
"https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
,
"integrity"
:
"sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"dependencies"
:
{
"estraverse"
:
"^5.2.0"
},
"engines"
:
{
"node"
:
">=4.0"
}
},
"node_modules/estraverse"
:
{
"version"
:
"5.3.0"
,
"resolved"
:
"https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
,
"integrity"
:
"sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"engines"
:
{
"node"
:
">=4.0"
}
},
"node_modules/esutils"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
,
"integrity"
:
"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/fast-deep-equal"
:
{
"version"
:
"3.1.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
,
"integrity"
:
"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/fast-glob"
:
{
"version"
:
"3.3.3"
,
"resolved"
:
"https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz"
,
"integrity"
:
"sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@nodelib/fs.stat"
:
"^2.0.2"
,
"@nodelib/fs.walk"
:
"^1.2.3"
,
"glob-parent"
:
"^5.1.2"
,
"merge2"
:
"^1.3.0"
,
"micromatch"
:
"^4.0.8"
},
"engines"
:
{
"node"
:
">=8.6.0"
}
},
"node_modules/fast-glob/node_modules/glob-parent"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
,
"integrity"
:
"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"is-glob"
:
"^4.0.1"
},
"engines"
:
{
"node"
:
">= 6"
}
},
"node_modules/fast-json-stable-stringify"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
,
"integrity"
:
"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/fast-levenshtein"
:
{
"version"
:
"2.0.6"
,
"resolved"
:
"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
,
"integrity"
:
"sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/fastq"
:
{
"version"
:
"1.19.1"
,
"resolved"
:
"https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz"
,
"integrity"
:
"sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"reusify"
:
"^1.0.4"
}
},
"node_modules/file-entry-cache"
:
{
"version"
:
"8.0.0"
,
"resolved"
:
"https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz"
,
"integrity"
:
"sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"flat-cache"
:
"^4.0.0"
},
"engines"
:
{
"node"
:
">=16.0.0"
}
},
"node_modules/fill-range"
:
{
"version"
:
"7.1.1"
,
"resolved"
:
"https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz"
,
"integrity"
:
"sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"to-regex-range"
:
"^5.0.1"
},
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/find-up"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
,
"integrity"
:
"sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"locate-path"
:
"^6.0.0"
,
"path-exists"
:
"^4.0.0"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/flat-cache"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz"
,
"integrity"
:
"sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"flatted"
:
"^3.2.9"
,
"keyv"
:
"^4.5.4"
},
"engines"
:
{
"node"
:
">=16"
}
},
"node_modules/flatted"
:
{
"version"
:
"3.3.3"
,
"resolved"
:
"https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz"
,
"integrity"
:
"sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="
,
"dev"
:
true
,
"license"
:
"ISC"
},
"node_modules/fsevents"
:
{
"version"
:
"2.3.3"
,
"resolved"
:
"https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
,
"integrity"
:
"sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="
,
"dev"
:
true
,
"hasInstallScript"
:
true
,
"license"
:
"MIT"
,
"optional"
:
true
,
"os"
:
[
"darwin"
],
"engines"
:
{
"node"
:
"^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/glob-parent"
:
{
"version"
:
"6.0.2"
,
"resolved"
:
"https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
,
"integrity"
:
"sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"is-glob"
:
"^4.0.3"
},
"engines"
:
{
"node"
:
">=10.13.0"
}
},
"node_modules/globals"
:
{
"version"
:
"16.1.0"
,
"resolved"
:
"https://registry.npmjs.org/globals/-/globals-16.1.0.tgz"
,
"integrity"
:
"sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=18"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/graphemer"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
,
"integrity"
:
"sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/has-flag"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
,
"integrity"
:
"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/ignore"
:
{
"version"
:
"5.3.2"
,
"resolved"
:
"https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
,
"integrity"
:
"sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 4"
}
},
"node_modules/import-fresh"
:
{
"version"
:
"3.3.1"
,
"resolved"
:
"https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz"
,
"integrity"
:
"sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"parent-module"
:
"^1.0.0"
,
"resolve-from"
:
"^4.0.0"
},
"engines"
:
{
"node"
:
">=6"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/imurmurhash"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
,
"integrity"
:
"sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=0.8.19"
}
},
"node_modules/is-extglob"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
,
"integrity"
:
"sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/is-glob"
:
{
"version"
:
"4.0.3"
,
"resolved"
:
"https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
,
"integrity"
:
"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"is-extglob"
:
"^2.1.1"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/is-number"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
,
"integrity"
:
"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=0.12.0"
}
},
"node_modules/isexe"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
,
"integrity"
:
"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
,
"dev"
:
true
,
"license"
:
"ISC"
},
"node_modules/js-yaml"
:
{
"version"
:
"4.1.0"
,
"resolved"
:
"https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
,
"integrity"
:
"sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"argparse"
:
"^2.0.1"
},
"bin"
:
{
"js-yaml"
:
"bin/js-yaml.js"
}
},
"node_modules/json-buffer"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
,
"integrity"
:
"sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/json-schema-traverse"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
,
"integrity"
:
"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/json-stable-stringify-without-jsonify"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
,
"integrity"
:
"sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/keyv"
:
{
"version"
:
"4.5.4"
,
"resolved"
:
"https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
,
"integrity"
:
"sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"json-buffer"
:
"3.0.1"
}
},
"node_modules/levn"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
,
"integrity"
:
"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"prelude-ls"
:
"^1.2.1"
,
"type-check"
:
"~0.4.0"
},
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/locate-path"
:
{
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
,
"integrity"
:
"sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"p-locate"
:
"^5.0.0"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash.merge"
:
{
"version"
:
"4.6.2"
,
"resolved"
:
"https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
,
"integrity"
:
"sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/merge2"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
,
"integrity"
:
"sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 8"
}
},
"node_modules/micromatch"
:
{
"version"
:
"4.0.8"
,
"resolved"
:
"https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz"
,
"integrity"
:
"sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"braces"
:
"^3.0.3"
,
"picomatch"
:
"^2.3.1"
},
"engines"
:
{
"node"
:
">=8.6"
}
},
"node_modules/minimatch"
:
{
"version"
:
"3.1.2"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
,
"integrity"
:
"sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"brace-expansion"
:
"^1.1.7"
},
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/ms"
:
{
"version"
:
"2.1.3"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
,
"integrity"
:
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/nanoid"
:
{
"version"
:
"3.3.11"
,
"resolved"
:
"https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz"
,
"integrity"
:
"sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/ai"
}
],
"license"
:
"MIT"
,
"bin"
:
{
"nanoid"
:
"bin/nanoid.cjs"
},
"engines"
:
{
"node"
:
"^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/natural-compare"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
,
"integrity"
:
"sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/optionator"
:
{
"version"
:
"0.9.4"
,
"resolved"
:
"https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
,
"integrity"
:
"sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"deep-is"
:
"^0.1.3"
,
"fast-levenshtein"
:
"^2.0.6"
,
"levn"
:
"^0.4.1"
,
"prelude-ls"
:
"^1.2.1"
,
"type-check"
:
"^0.4.0"
,
"word-wrap"
:
"^1.2.5"
},
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/p-limit"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
,
"integrity"
:
"sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"yocto-queue"
:
"^0.1.0"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
,
"integrity"
:
"sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"p-limit"
:
"^3.0.2"
},
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parent-module"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
,
"integrity"
:
"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"callsites"
:
"^3.0.0"
},
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/path-exists"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
,
"integrity"
:
"sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/path-key"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
,
"integrity"
:
"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/picocolors"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
,
"integrity"
:
"sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
,
"dev"
:
true
,
"license"
:
"ISC"
},
"node_modules/picomatch"
:
{
"version"
:
"2.3.1"
,
"resolved"
:
"https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
,
"integrity"
:
"sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8.6"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/postcss"
:
{
"version"
:
"8.5.3"
,
"resolved"
:
"https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz"
,
"integrity"
:
"sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/postcss/"
},
{
"type"
:
"tidelift"
,
"url"
:
"https://tidelift.com/funding/github/npm/postcss"
},
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/ai"
}
],
"license"
:
"MIT"
,
"dependencies"
:
{
"nanoid"
:
"^3.3.8"
,
"picocolors"
:
"^1.1.1"
,
"source-map-js"
:
"^1.2.1"
},
"engines"
:
{
"node"
:
"^10 || ^12 || >=14"
}
},
"node_modules/prelude-ls"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
,
"integrity"
:
"sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/punycode"
:
{
"version"
:
"2.3.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
,
"integrity"
:
"sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/queue-microtask"
:
{
"version"
:
"1.2.3"
,
"resolved"
:
"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
,
"integrity"
:
"sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/feross"
},
{
"type"
:
"patreon"
,
"url"
:
"https://www.patreon.com/feross"
},
{
"type"
:
"consulting"
,
"url"
:
"https://feross.org/support"
}
],
"license"
:
"MIT"
},
"node_modules/react"
:
{
"version"
:
"19.1.0"
,
"resolved"
:
"https://registry.npmjs.org/react/-/react-19.1.0.tgz"
,
"integrity"
:
"sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/react-dom"
:
{
"version"
:
"19.1.0"
,
"resolved"
:
"https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz"
,
"integrity"
:
"sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="
,
"license"
:
"MIT"
,
"dependencies"
:
{
"scheduler"
:
"^0.26.0"
},
"peerDependencies"
:
{
"react"
:
"^19.1.0"
}
},
"node_modules/resolve-from"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
,
"integrity"
:
"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=4"
}
},
"node_modules/reusify"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz"
,
"integrity"
:
"sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"iojs"
:
">=1.0.0"
,
"node"
:
">=0.10.0"
}
},
"node_modules/rollup"
:
{
"version"
:
"4.41.0"
,
"resolved"
:
"https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz"
,
"integrity"
:
"sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@types/estree"
:
"1.0.7"
},
"bin"
:
{
"rollup"
:
"dist/bin/rollup"
},
"engines"
:
{
"node"
:
">=18.0.0"
,
"npm"
:
">=8.0.0"
},
"optionalDependencies"
:
{
"@rollup/rollup-android-arm-eabi"
:
"4.41.0"
,
"@rollup/rollup-android-arm64"
:
"4.41.0"
,
"@rollup/rollup-darwin-arm64"
:
"4.41.0"
,
"@rollup/rollup-darwin-x64"
:
"4.41.0"
,
"@rollup/rollup-freebsd-arm64"
:
"4.41.0"
,
"@rollup/rollup-freebsd-x64"
:
"4.41.0"
,
"@rollup/rollup-linux-arm-gnueabihf"
:
"4.41.0"
,
"@rollup/rollup-linux-arm-musleabihf"
:
"4.41.0"
,
"@rollup/rollup-linux-arm64-gnu"
:
"4.41.0"
,
"@rollup/rollup-linux-arm64-musl"
:
"4.41.0"
,
"@rollup/rollup-linux-loongarch64-gnu"
:
"4.41.0"
,
"@rollup/rollup-linux-powerpc64le-gnu"
:
"4.41.0"
,
"@rollup/rollup-linux-riscv64-gnu"
:
"4.41.0"
,
"@rollup/rollup-linux-riscv64-musl"
:
"4.41.0"
,
"@rollup/rollup-linux-s390x-gnu"
:
"4.41.0"
,
"@rollup/rollup-linux-x64-gnu"
:
"4.41.0"
,
"@rollup/rollup-linux-x64-musl"
:
"4.41.0"
,
"@rollup/rollup-win32-arm64-msvc"
:
"4.41.0"
,
"@rollup/rollup-win32-ia32-msvc"
:
"4.41.0"
,
"@rollup/rollup-win32-x64-msvc"
:
"4.41.0"
,
"fsevents"
:
"~2.3.2"
}
},
"node_modules/run-parallel"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
,
"integrity"
:
"sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/feross"
},
{
"type"
:
"patreon"
,
"url"
:
"https://www.patreon.com/feross"
},
{
"type"
:
"consulting"
,
"url"
:
"https://feross.org/support"
}
],
"license"
:
"MIT"
,
"dependencies"
:
{
"queue-microtask"
:
"^1.2.2"
}
},
"node_modules/scheduler"
:
{
"version"
:
"0.26.0"
,
"resolved"
:
"https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz"
,
"integrity"
:
"sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="
,
"license"
:
"MIT"
},
"node_modules/semver"
:
{
"version"
:
"7.7.2"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-7.7.2.tgz"
,
"integrity"
:
"sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"bin"
:
{
"semver"
:
"bin/semver.js"
},
"engines"
:
{
"node"
:
">=10"
}
},
"node_modules/shebang-command"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
,
"integrity"
:
"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"shebang-regex"
:
"^3.0.0"
},
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/shebang-regex"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
,
"integrity"
:
"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/source-map-js"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
,
"integrity"
:
"sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
,
"dev"
:
true
,
"license"
:
"BSD-3-Clause"
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/strip-json-comments"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
,
"integrity"
:
"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-color"
:
{
"version"
:
"7.2.0"
,
"resolved"
:
"https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
,
"integrity"
:
"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"has-flag"
:
"^4.0.0"
},
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/tinyglobby"
:
{
"version"
:
"0.2.13"
,
"resolved"
:
"https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz"
,
"integrity"
:
"sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"fdir"
:
"^6.4.4"
,
"picomatch"
:
"^4.0.2"
},
"engines"
:
{
"node"
:
">=12.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/SuperchupuDev"
}
},
"node_modules/tinyglobby/node_modules/fdir"
:
{
"version"
:
"6.4.4"
,
"resolved"
:
"https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz"
,
"integrity"
:
"sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"picomatch"
:
"^3 || ^4"
},
"peerDependenciesMeta"
:
{
"picomatch"
:
{
"optional"
:
true
}
}
},
"node_modules/tinyglobby/node_modules/picomatch"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz"
,
"integrity"
:
"sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/to-regex-range"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
,
"integrity"
:
"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"is-number"
:
"^7.0.0"
},
"engines"
:
{
"node"
:
">=8.0"
}
},
"node_modules/ts-api-utils"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz"
,
"integrity"
:
"sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=18.12"
},
"peerDependencies"
:
{
"typescript"
:
">=4.8.4"
}
},
"node_modules/type-check"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
,
"integrity"
:
"sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"prelude-ls"
:
"^1.2.1"
},
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/typescript"
:
{
"version"
:
"5.8.3"
,
"resolved"
:
"https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz"
,
"integrity"
:
"sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"bin"
:
{
"tsc"
:
"bin/tsc"
,
"tsserver"
:
"bin/tsserver"
},
"engines"
:
{
"node"
:
">=14.17"
}
},
"node_modules/typescript-eslint"
:
{
"version"
:
"8.32.1"
,
"resolved"
:
"https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz"
,
"integrity"
:
"sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@typescript-eslint/eslint-plugin"
:
"8.32.1"
,
"@typescript-eslint/parser"
:
"8.32.1"
,
"@typescript-eslint/utils"
:
"8.32.1"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/typescript-eslint"
},
"peerDependencies"
:
{
"eslint"
:
"^8.57.0 || ^9.0.0"
,
"typescript"
:
">=4.8.4 <5.9.0"
}
},
"node_modules/uri-js"
:
{
"version"
:
"4.4.1"
,
"resolved"
:
"https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
,
"integrity"
:
"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"dependencies"
:
{
"punycode"
:
"^2.1.0"
}
},
"node_modules/vite"
:
{
"version"
:
"6.3.5"
,
"resolved"
:
"https://registry.npmjs.org/vite/-/vite-6.3.5.tgz"
,
"integrity"
:
"sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"esbuild"
:
"^0.25.0"
,
"fdir"
:
"^6.4.4"
,
"picomatch"
:
"^4.0.2"
,
"postcss"
:
"^8.5.3"
,
"rollup"
:
"^4.34.9"
,
"tinyglobby"
:
"^0.2.13"
},
"bin"
:
{
"vite"
:
"bin/vite.js"
},
"engines"
:
{
"node"
:
"^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding"
:
{
"url"
:
"https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies"
:
{
"fsevents"
:
"~2.3.3"
},
"peerDependencies"
:
{
"@types/node"
:
"^18.0.0 || ^20.0.0 || >=22.0.0"
,
"jiti"
:
">=1.21.0"
,
"less"
:
"*"
,
"lightningcss"
:
"^1.21.0"
,
"sass"
:
"*"
,
"sass-embedded"
:
"*"
,
"stylus"
:
"*"
,
"sugarss"
:
"*"
,
"terser"
:
"^5.16.0"
,
"tsx"
:
"^4.8.1"
,
"yaml"
:
"^2.4.2"
},
"peerDependenciesMeta"
:
{
"@types/node"
:
{
"optional"
:
true
},
"jiti"
:
{
"optional"
:
true
},
"less"
:
{
"optional"
:
true
},
"lightningcss"
:
{
"optional"
:
true
},
"sass"
:
{
"optional"
:
true
},
"sass-embedded"
:
{
"optional"
:
true
},
"stylus"
:
{
"optional"
:
true
},
"sugarss"
:
{
"optional"
:
true
},
"terser"
:
{
"optional"
:
true
},
"tsx"
:
{
"optional"
:
true
},
"yaml"
:
{
"optional"
:
true
}
}
},
"node_modules/vite/node_modules/fdir"
:
{
"version"
:
"6.4.4"
,
"resolved"
:
"https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz"
,
"integrity"
:
"sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"picomatch"
:
"^3 || ^4"
},
"peerDependenciesMeta"
:
{
"picomatch"
:
{
"optional"
:
true
}
}
},
"node_modules/vite/node_modules/picomatch"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz"
,
"integrity"
:
"sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=12"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/which"
:
{
"version"
:
"2.0.2"
,
"resolved"
:
"https://registry.npmjs.org/which/-/which-2.0.2.tgz"
,
"integrity"
:
"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"isexe"
:
"^2.0.0"
},
"bin"
:
{
"node-which"
:
"bin/node-which"
},
"engines"
:
{
"node"
:
">= 8"
}
},
"node_modules/word-wrap"
:
{
"version"
:
"1.2.5"
,
"resolved"
:
"https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz"
,
"integrity"
:
"sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/yocto-queue"
:
{
"version"
:
"0.1.0"
,
"resolved"
:
"https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
,
"integrity"
:
"sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
}
}
}
comment-system/static/package.json
0 → 100644
View file @
c0f46fb4
{
"name"
:
"my-app"
,
"private"
:
true
,
"version"
:
"0.0.0"
,
"type"
:
"module"
,
"scripts"
:
{
"dev"
:
"vite"
,
"build"
:
"tsc -b && vite build"
,
"lint"
:
"eslint ."
,
"preview"
:
"vite preview"
},
"dependencies"
:
{
"date-fns"
:
"^4.1.0"
,
"react"
:
"^19.1.0"
,
"react-dom"
:
"^19.1.0"
},
"devDependencies"
:
{
"@eslint/js"
:
"^9.25.0"
,
"@types/react"
:
"^19.1.2"
,
"@types/react-dom"
:
"^19.1.2"
,
"@vitejs/plugin-react-swc"
:
"^3.9.0"
,
"eslint"
:
"^9.25.0"
,
"eslint-plugin-react-hooks"
:
"^5.2.0"
,
"eslint-plugin-react-refresh"
:
"^0.4.19"
,
"globals"
:
"^16.0.0"
,
"typescript"
:
"~5.8.3"
,
"typescript-eslint"
:
"^8.30.1"
,
"vite"
:
"^6.3.5"
}
}
comment-system/static/public/icon.jpg
0 → 100644
View file @
c0f46fb4
270 KB
comment-system/static/src/App.css
0 → 100644
View file @
c0f46fb4
comment-system/static/src/App.tsx
0 → 100644
View file @
c0f46fb4
import
{
format
}
from
"
date-fns
"
;
const
currentTime
=
new
Date
();
const
formattedTime
=
format
(
currentTime
,
'
yyyy-MM-dd HH:mm
'
);
async
function
AddComment
({
name
,
profilePhoto
}:{
name
:
string
,
profilePhoto
:
string
})
{
const
textInput
=
document
.
getElementById
(
'
textInput
'
)
as
HTMLInputElement
;
const
content
=
textInput
.
value
;
if
(
content
===
''
)
{
alert
(
'
Text input cannot be empty
'
)
return
}
if
(
name
===
''
)
{
name
=
'
小黑子
'
}
try
{
const
response
=
await
fetch
(
'
http://localhost:8080/comment/add
'
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
},
body
:
JSON
.
stringify
({
name
,
content
,
created_at
:
formattedTime
})
});
const
result
=
await
response
.
json
();
if
(
result
.
code
!==
0
)
{
alert
(
`操作失败:
${
result
.
msg
}
`
);
throw
new
Error
(
result
.
msg
);
}
const
newComment
=
result
.
data
;
const
NewCommentPart
=
document
.
createElement
(
'
div
'
)
const
UserPhoto
=
document
.
createElement
(
'
img
'
)
UserPhoto
.
className
=
'
comment-avatar
'
UserPhoto
.
src
=
profilePhoto
UserPhoto
.
alt
=
name
UserPhoto
.
style
.
width
=
'
30px
'
UserPhoto
.
style
.
height
=
'
30px
'
UserPhoto
.
style
.
borderRadius
=
'
50%
'
NewCommentPart
.
appendChild
(
UserPhoto
)
const
UserCommentContent
=
document
.
createElement
(
'
div
'
)
UserCommentContent
.
className
=
'
comment-content
'
const
UserName
=
document
.
createElement
(
'
span
'
)
UserName
.
textContent
=
name
UserName
.
className
=
'
comment-meta
'
UserCommentContent
.
appendChild
(
UserName
)
const
UserDate
=
document
.
createElement
(
'
span
'
)
UserDate
.
textContent
=
formattedTime
UserDate
.
className
=
'
comment-date
'
UserCommentContent
.
appendChild
(
UserDate
)
const
UserComment
=
document
.
createElement
(
'
p
'
)
UserComment
.
textContent
=
textInput
.
value
UserComment
.
style
.
marginLeft
=
'
10px
'
textInput
.
value
=
''
;
(
document
.
getElementById
(
'
nameInput
'
)
as
HTMLInputElement
).
value
=
''
;
UserCommentContent
.
appendChild
(
UserComment
)
const
DeleteButtonArea
=
document
.
createElement
(
'
div
'
)
DeleteButtonArea
.
className
=
'
comment-delete
'
const
DeleteButton
=
document
.
createElement
(
'
button
'
)
DeleteButton
.
textContent
=
'
Delete
'
DeleteButton
.
id
=
'
deleteButton
'
DeleteButton
.
onclick
=
async
()
=>
{
const
commentItem
=
DeleteButton
.
closest
(
'
.comment-item
'
)
if
(
commentItem
)
{
commentItem
.
remove
()
try
{
await
fetch
(
`http://localhost:8080/comment/delete?id=
${
newComment
.
id
}
`
,
{
method
:
'
POST
'
});
commentItem
.
remove
();
}
catch
{
alert
(
'
删除失败:
'
);
}
}
}
DeleteButtonArea
.
appendChild
(
DeleteButton
)
UserCommentContent
.
appendChild
(
DeleteButtonArea
)
NewCommentPart
.
appendChild
(
UserCommentContent
)
const
NewComment
=
document
.
createElement
(
'
li
'
)
NewComment
.
className
=
'
comment-item
'
NewComment
.
style
.
listStyle
=
'
none
'
NewComment
.
appendChild
(
NewCommentPart
)
const
CommentList
=
document
.
getElementById
(
'
commentlist
'
)
as
HTMLUListElement
CommentList
.
appendChild
(
NewComment
)
}
catch
(
error
)
{
console
.
error
(
'
添加评论失败:
'
,
error
);
};
}
export
default
AddComment
\ No newline at end of file
comment-system/static/src/App1.tsx
0 → 100644
View file @
c0f46fb4
async
function
AddComment
({
name
,
profilePhoto
}:{
name
:
string
,
profilePhoto
:
string
})
{
const
textInput
=
document
.
getElementById
(
'
textInput
'
)
as
HTMLInputElement
;
const
content
=
textInput
.
value
;
if
(
content
===
''
)
{
alert
(
'
Text input cannot be empty
'
)
return
}
if
(
name
===
''
)
{
name
=
'
小黑子
'
}
try
{
const
NewCommentPart
=
document
.
createElement
(
'
div
'
)
const
UserPhoto
=
document
.
createElement
(
'
img
'
)
UserPhoto
.
className
=
'
comment-avatar
'
UserPhoto
.
src
=
profilePhoto
UserPhoto
.
alt
=
name
UserPhoto
.
style
.
width
=
'
30px
'
UserPhoto
.
style
.
height
=
'
30px
'
UserPhoto
.
style
.
borderRadius
=
'
50%
'
NewCommentPart
.
appendChild
(
UserPhoto
)
const
UserCommentContent
=
document
.
createElement
(
'
div
'
)
UserCommentContent
.
className
=
'
comment-content
'
const
UserName
=
document
.
createElement
(
'
span
'
)
UserName
.
textContent
=
name
UserName
.
className
=
'
comment-meta
'
UserCommentContent
.
appendChild
(
UserName
)
const
UserComment
=
document
.
createElement
(
'
p
'
)
UserComment
.
textContent
=
textInput
.
value
UserComment
.
style
.
marginLeft
=
'
10px
'
textInput
.
value
=
''
;
(
document
.
getElementById
(
'
nameInput
'
)
as
HTMLInputElement
).
value
=
''
;
UserCommentContent
.
appendChild
(
UserComment
)
const
DeleteButtonArea
=
document
.
createElement
(
'
div
'
)
DeleteButtonArea
.
className
=
'
comment-delete
'
const
DeleteButton
=
document
.
createElement
(
'
button
'
)
DeleteButton
.
textContent
=
'
Delete
'
DeleteButton
.
id
=
'
deleteButton
'
DeleteButton
.
onclick
=
async
()
=>
{
const
commentItem
=
DeleteButton
.
closest
(
'
.comment-item
'
)
if
(
commentItem
)
{
commentItem
.
remove
()
}
}
DeleteButtonArea
.
appendChild
(
DeleteButton
)
UserCommentContent
.
appendChild
(
DeleteButtonArea
)
NewCommentPart
.
appendChild
(
UserCommentContent
)
const
NewComment
=
document
.
createElement
(
'
li
'
)
NewComment
.
className
=
'
comment-item
'
NewComment
.
style
.
listStyle
=
'
none
'
NewComment
.
appendChild
(
NewCommentPart
)
const
CommentList
=
document
.
getElementById
(
'
commentlist
'
)
as
HTMLUListElement
CommentList
.
appendChild
(
NewComment
)
}
catch
{
alert
(
'
添加评论失败:
'
);
};
}
export
default
AddComment
\ No newline at end of file
comment-system/static/src/date.tsx
0 → 100644
View file @
c0f46fb4
import
{
useState
,
useEffect
}
from
'
react
'
;
export
default
function
DateTimeDisplay
()
{
return
(
<
div
className
=
"card"
>
<
Clock
></
Clock
>
<
DateDisplay
></
DateDisplay
>
<
svg
xmlns
=
"http://www.w3.org/2000/svg"
width
=
"1em"
height
=
"1em"
viewBox
=
"0 0 16 16"
stroke-width
=
"0"
fill
=
"currentColor"
stroke
=
"currentColor"
className
=
"moon"
><
path
d
=
"M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"
></
path
><
path
d
=
"M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z"
></
path
></
svg
>
</
div
>
)
}
function
Clock
()
{
const
[
time
,
setTime
]
=
useState
(
new
Date
());
useEffect
(()
=>
{
const
timer
=
setInterval
(()
=>
{
setTime
(
new
Date
());
},
1000
);
return
()
=>
clearInterval
(
timer
);
},
[]);
// 创建时间格式化器
const
formatter
=
new
Intl
.
DateTimeFormat
(
'
en-US
'
,
{
hour
:
'
numeric
'
,
minute
:
'
2-digit
'
,
second
:
'
2-digit
'
,
hour12
:
true
});
// 将时间拆分为各个部分
const
parts
=
formatter
.
formatToParts
(
time
);
// 提取时间部分和AM/PM部分
const
timeParts
=
[];
let
period
=
''
;
for
(
const
part
of
parts
)
{
if
(
part
.
type
===
'
dayPeriod
'
)
{
period
=
part
.
value
.
toUpperCase
();
// 转换为大写
}
else
{
timeParts
.
push
(
part
.
value
);
}
}
// 合并时间部分(小时、分钟、秒)
const
timeString
=
timeParts
.
join
(
''
);
return
(
<
p
className
=
'time-text'
>
<
span
className
=
'time-text'
>
{
timeString
}
</
span
>
<
span
className
=
'time-sub-text'
>
{
period
}
</
span
>
</
p
>
);
}
function
DateDisplay
()
{
const
[
date
,
setDate
]
=
useState
(
new
Date
());
useEffect
(()
=>
{
const
timer
=
setInterval
(()
=>
{
setDate
(
new
Date
());
},
1000
);
return
()
=>
clearInterval
(
timer
);
},
[]);
// 获取星期名称
const
weekday
=
date
.
toLocaleDateString
(
'
en-US
'
,
{
weekday
:
'
long
'
});
// 获取月份名称
const
month
=
date
.
toLocaleDateString
(
'
en-US
'
,
{
month
:
'
long
'
});
// 获取日期数字
const
day
=
date
.
getDate
();
// 添加日期序数后缀
interface
GetDayWithSuffix
{
(
day
:
number
):
string
;
}
const
getDayWithSuffix
:
GetDayWithSuffix
=
(
day
:
number
):
string
=>
{
if
(
day
>
3
&&
day
<
21
)
return
`
${
day
}
th`
;
// 11th-13th例外规则
switch
(
day
%
10
)
{
case
1
:
return
`
${
day
}
st`
;
case
2
:
return
`
${
day
}
nd`
;
case
3
:
return
`
${
day
}
rd`
;
default
:
return
`
${
day
}
th`
;
}
};
return
<
p
className
=
'day-text'
>
{
weekday
}
,
{
month
}
{
getDayWithSuffix
(
day
)
}
</
p
>;
}
\ No newline at end of file
comment-system/static/src/index.css
0 → 100644
View file @
c0f46fb4
:root
{
/* Enhanced color palette */
--primary-color
:
#6366f1
;
--primary-hover
:
#4f46e5
;
--primary-light
:
#a5b4fc
;
--secondary-color
:
#06b6d4
;
--accent-color
:
#f59e0b
;
--success-color
:
#10b981
;
/* Text colors */
--text-primary
:
#0f172a
;
--text-secondary
:
#475569
;
--text-muted
:
#94a3b8
;
/* Background colors */
--bg-primary
:
#ffffff
;
--bg-secondary
:
#f8fafc
;
--bg-accent
:
#f1f5f9
;
--bg-gradient
:
linear-gradient
(
135deg
,
#667eea
0%
,
#764ba2
100%
);
/* Border and shadows */
--border-color
:
#e2e8f0
;
--border-radius
:
16px
;
--border-radius-sm
:
8px
;
--shadow-sm
:
0
1px
3px
rgba
(
15
,
23
,
42
,
0.08
);
--shadow-md
:
0
4px
16px
rgba
(
15
,
23
,
42
,
0.1
);
--shadow-lg
:
0
8px
32px
rgba
(
15
,
23
,
42
,
0.12
);
--shadow-xl
:
0
20px
64px
rgba
(
15
,
23
,
42
,
0.15
);
/* Transitions */
--transition-fast
:
all
0.15s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
--transition-normal
:
all
0.3s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
--transition-slow
:
all
0.5s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
}
/* Global styles */
*
{
box-sizing
:
border-box
;
}
body
{
font-family
:
'Inter'
,
-apple-system
,
BlinkMacSystemFont
,
'Segoe UI'
,
Roboto
,
sans-serif
;
background
:
var
(
--bg-secondary
);
background-image
:
radial-gradient
(
circle
at
25%
25%
,
rgba
(
99
,
102
,
241
,
0.05
)
0%
,
transparent
50%
),
radial-gradient
(
circle
at
75%
75%
,
rgba
(
6
,
182
,
212
,
0.05
)
0%
,
transparent
50%
);
min-height
:
100vh
;
margin
:
0
;
padding
:
0
;
line-height
:
1.6
;
color
:
var
(
--text-primary
);
}
/* Header styling */
h1
{
background
:
var
(
--bg-gradient
);
-webkit-background-clip
:
text
;
-webkit-text-fill-color
:
transparent
;
background-clip
:
text
;
font-size
:
2.5rem
;
font-weight
:
800
;
text-align
:
center
;
margin
:
2rem
0
;
text-shadow
:
0
2px
4px
rgba
(
0
,
0
,
0
,
0.1
);
animation
:
fadeInDown
0.8s
ease-out
;
}
h3
{
color
:
var
(
--text-secondary
);
font-size
:
1.5rem
;
font-weight
:
600
;
text-align
:
center
;
margin
:
1.5rem
0
;
position
:
relative
;
}
h3
::after
{
content
:
''
;
position
:
absolute
;
bottom
:
-8px
;
left
:
50%
;
transform
:
translateX
(
-50%
);
width
:
60px
;
height
:
3px
;
background
:
var
(
--bg-gradient
);
border-radius
:
2px
;
}
/* Input area styling */
.inputarea
{
background
:
var
(
--bg-primary
);
padding
:
2rem
;
border-radius
:
var
(
--border-radius
);
box-shadow
:
var
(
--shadow-lg
);
width
:
min
(
95%
,
700px
);
margin
:
2rem
auto
;
border
:
1px
solid
var
(
--border-color
);
position
:
relative
;
backdrop-filter
:
blur
(
10px
);
animation
:
slideInUp
0.6s
ease-out
;
display
:
flex
;
flex-direction
:
column
;
gap
:
1.5rem
;
}
.inputarea
::before
{
content
:
''
;
position
:
absolute
;
top
:
0
;
left
:
0
;
right
:
0
;
height
:
4px
;
background
:
var
(
--bg-gradient
);
border-radius
:
var
(
--border-radius
)
var
(
--border-radius
)
0
0
;
}
.inputarea
::after
{
content
:
''
;
position
:
absolute
;
bottom
:
-2rem
;
left
:
50%
;
transform
:
translateX
(
-50%
);
width
:
60%
;
height
:
6px
;
background
:
linear-gradient
(
90deg
,
transparent
,
var
(
--primary-light
),
transparent
);
opacity
:
0.4
;
border-radius
:
3px
;
}
/* Profile section in input area */
.inputarea
>
div
:first-child
{
display
:
flex
;
align-items
:
center
;
gap
:
1rem
;
margin-bottom
:
1rem
;
}
.inputarea
img
{
width
:
48px
;
height
:
48px
;
border-radius
:
50%
;
object-fit
:
cover
;
border
:
3px
solid
var
(
--primary-light
);
box-shadow
:
var
(
--shadow-md
);
transition
:
var
(
--transition-normal
);
}
.inputarea
img
:hover
{
transform
:
scale
(
1.05
);
border-color
:
var
(
--primary-color
);
}
.card
{
width
:
280px
;
height
:
60px
;
background
:
rgb
(
17
,
4
,
134
);
border-radius
:
15px
;
box-shadow
:
rgb
(
0
,
0
,
0
,
0.7
)
5px
5px
10px
,
rgb
(
0
,
0
,
0
,
0.7
)
-5px
0px
10px
;
display
:
flex
;
color
:
white
;
justify-content
:
center
;
position
:
absolute
;
right
:
30px
;
top
:
21px
;
flex-direction
:
column
;
background
:
linear-gradient
(
to
right
,
rgb
(
20
,
30
,
48
),
rgb
(
36
,
59
,
85
));
cursor
:
pointer
;
transition
:
all
0.3s
ease-in-out
;
overflow
:
hidden
;
}
.card
:hover
{
box-shadow
:
rgb
(
0
,
0
,
0
)
5px
5px
10px
,
rgb
(
0
,
0
,
0
)
-5px
0px
10px
;
}
.time-text
{
font-size
:
20px
;
margin-bottom
:
0px
;
margin-left
:
8px
;
font-weight
:
600
;
font-family
:
'Gill Sans'
,
'Gill Sans MT'
,
Calibri
,
'Trebuchet MS'
,
sans-serif
;
}
.time-sub-text
{
font-size
:
15px
;
margin-left
:
5px
;
}
.day-text
{
font-size
:
15px
;
margin-top
:
0px
;
margin-left
:
15px
;
font-weight
:
500
;
font-family
:
'Gill Sans'
,
'Gill Sans MT'
,
Calibri
,
'Trebuchet MS'
,
sans-serif
;
}
.moon
{
font-size
:
20px
;
position
:
absolute
;
right
:
15px
;
top
:
15px
;
transition
:
all
0.3s
ease-in-out
;
}
.card
:hover
>
.moon
{
font-size
:
23px
;
}
/* Input field styling */
.inputarea
input
{
width
:
100%
;
padding
:
1rem
1.25rem
;
border
:
2px
solid
var
(
--border-color
);
border-radius
:
var
(
--border-radius-sm
);
font-size
:
1rem
;
font-family
:
inherit
;
transition
:
var
(
--transition-normal
);
background
:
var
(
--bg-secondary
);
outline
:
none
;
resize
:
none
;
}
.inputarea
input
::placeholder
{
color
:
var
(
--text-muted
);
font-style
:
italic
;
}
.inputarea
input
:focus
{
border-color
:
var
(
--primary-color
);
box-shadow
:
0
0
0
4px
rgba
(
99
,
102
,
241
,
0.1
);
background
:
var
(
--bg-primary
);
transform
:
translateY
(
-1px
);
}
/* Submit button styling */
#submitButton
{
background
:
var
(
--bg-gradient
);
color
:
white
;
padding
:
0.875rem
2rem
;
border
:
none
;
border-radius
:
var
(
--border-radius-sm
);
font-weight
:
600
;
font-size
:
1rem
;
cursor
:
pointer
;
transition
:
var
(
--transition-normal
);
display
:
inline-flex
;
align-items
:
center
;
justify-content
:
center
;
gap
:
0.5rem
;
position
:
relative
;
overflow
:
hidden
;
text-transform
:
uppercase
;
letter-spacing
:
0.5px
;
align-self
:
flex-start
;
}
#submitButton
::before
{
content
:
''
;
position
:
absolute
;
top
:
0
;
left
:
-100%
;
width
:
100%
;
height
:
100%
;
background
:
linear-gradient
(
90deg
,
transparent
,
rgba
(
255
,
255
,
255
,
0.2
),
transparent
);
transition
:
var
(
--transition-normal
);
}
#submitButton
:hover
{
transform
:
translateY
(
-2px
);
box-shadow
:
var
(
--shadow-lg
);
}
#submitButton
:hover::before
{
left
:
100%
;
}
#submitButton
:active
{
transform
:
translateY
(
0
);
}
/* Comment list container */
.comment
{
width
:
min
(
95%
,
700px
);
margin
:
0
auto
2rem
;
}
.no-comments
{
text-align
:
center
;
color
:
var
(
--text-muted
);
font-size
:
1.25rem
;
margin-top
:
2rem
;
animation
:
fadeInDown
0.5s
ease-out
;
}
#commentlist
{
padding
:
0
;
margin
:
0
;
list-style
:
none
;
}
/* Individual comment item styling */
.comment-item
{
background
:
var
(
--bg-primary
);
padding
:
1.5rem
;
border-radius
:
var
(
--border-radius
);
box-shadow
:
var
(
--shadow-md
);
margin-bottom
:
1.5rem
;
position
:
relative
;
transition
:
var
(
--transition-normal
);
border-left
:
4px
solid
var
(
--primary-light
);
animation
:
fadeInLeft
0.5s
ease-out
;
}
.comment-item
:hover
{
transform
:
translateY
(
-3px
)
translateX
(
5px
);
box-shadow
:
var
(
--shadow-xl
);
border-left-color
:
var
(
--primary-color
);
}
.comment-item
::before
{
content
:
''
;
position
:
absolute
;
top
:
1.5rem
;
left
:
-2px
;
width
:
4px
;
height
:
24px
;
background
:
var
(
--accent-color
);
border-radius
:
2px
;
opacity
:
0
;
transition
:
var
(
--transition-normal
);
}
.comment-item
:hover::before
{
opacity
:
1
;
}
/* Comment content layout */
.comment-item
>
div
{
display
:
flex
;
gap
:
1rem
;
align-items
:
flex-start
;
}
/* Comment avatar */
.comment-avatar
{
width
:
40px
!important
;
height
:
40px
!important
;
border-radius
:
50%
!important
;
object-fit
:
cover
;
border
:
2px
solid
var
(
--primary-light
)
!important
;
box-shadow
:
var
(
--shadow-sm
)
!important
;
transition
:
var
(
--transition-normal
)
!important
;
flex-shrink
:
0
;
}
.comment-item
:hover
.comment-avatar
{
transform
:
scale
(
1.1
);
border-color
:
var
(
--primary-color
)
!important
;
}
/* Comment content area */
.comment-content
{
flex
:
1
;
margin-left
:
0
!important
;
}
/* Comment meta (username) */
.comment-meta
{
color
:
var
(
--text-secondary
)
!important
;
font-size
:
0.875rem
!important
;
font-weight
:
600
!important
;
margin-bottom
:
0.5rem
!important
;
display
:
flex
!important
;
align-items
:
center
!important
;
gap
:
0.5rem
!important
;
}
.comment-meta
::after
{
content
:
'•'
;
color
:
var
(
--text-muted
);
font-size
:
0.75rem
;
}
.comment-date
{
color
:
var
(
--text-secondary
)
!important
;
font-size
:
0.875rem
!important
;
font-weight
:
600
!important
;
margin-bottom
:
0.5rem
!important
;
display
:
flex
!important
;
align-items
:
center
!important
;
gap
:
0.5rem
!important
;
}
.comment-date
::after
{
content
:
'•'
;
color
:
var
(
--text-muted
);
font-size
:
0.75rem
;
}
/* Comment text */
.comment-content
p
{
color
:
var
(
--text-primary
)
!important
;
margin
:
0
!important
;
line-height
:
1.7
!important
;
padding
:
1rem
!important
;
background
:
var
(
--bg-accent
)
!important
;
border-radius
:
var
(
--border-radius-sm
)
!important
;
position
:
relative
!important
;
border
:
1px
solid
var
(
--border-color
);
margin-left
:
0
!important
;
}
.comment-content
p
::before
{
content
:
''
!important
;
position
:
absolute
!important
;
left
:
-6px
!important
;
top
:
1rem
!important
;
width
:
0
!important
;
height
:
0
!important
;
border-style
:
solid
!important
;
border-width
:
6px
6px
6px
0
!important
;
border-color
:
transparent
var
(
--bg-accent
)
transparent
transparent
!important
;
}
#deleteButton
{
background
:
transparent
;
color
:
var
(
--text-muted
);
border
:
none
;
cursor
:
pointer
;
font-size
:
0.875rem
;
font-weight
:
600
;
transition
:
var
(
--transition-normal
);
}
/* Animations */
@keyframes
fadeInDown
{
from
{
opacity
:
0
;
transform
:
translateY
(
-30px
);
}
to
{
opacity
:
1
;
transform
:
translateY
(
0
);
}
}
@keyframes
slideInUp
{
from
{
opacity
:
0
;
transform
:
translateY
(
30px
);
}
to
{
opacity
:
1
;
transform
:
translateY
(
0
);
}
}
@keyframes
fadeInLeft
{
from
{
opacity
:
0
;
transform
:
translateX
(
-20px
);
}
to
{
opacity
:
1
;
transform
:
translateX
(
0
);
}
}
/* Dark mode support */
@media
(
prefers-color-scheme
:
dark
)
{
:root
{
--text-primary
:
#f1f5f9
;
--text-secondary
:
#cbd5e1
;
--text-muted
:
#64748b
;
--bg-primary
:
#1e293b
;
--bg-secondary
:
#0f172a
;
--bg-accent
:
#334155
;
--border-color
:
#475569
;
--bg-gradient
:
linear-gradient
(
135deg
,
#4f46e5
0%
,
#06b6d4
100%
);
}
body
{
background-image
:
radial-gradient
(
circle
at
25%
25%
,
rgba
(
79
,
70
,
229
,
0.1
)
0%
,
transparent
50%
),
radial-gradient
(
circle
at
75%
75%
,
rgba
(
6
,
182
,
212
,
0.1
)
0%
,
transparent
50%
);
}
.inputarea
input
{
background
:
var
(
--bg-accent
);
}
.inputarea
input
:focus
{
background
:
var
(
--bg-primary
);
}
}
/* Responsive design */
@media
(
max-width
:
768px
)
{
h1
{
font-size
:
2rem
;
}
.inputarea
{
padding
:
1.5rem
;
margin
:
1rem
auto
;
width
:
min
(
95%
,
100%
);
}
.comment
{
width
:
min
(
95%
,
100%
);
}
.comment-item
{
padding
:
1rem
;
}
.comment-item
>
div
{
flex-direction
:
column
;
gap
:
0.75rem
;
}
.comment-avatar
{
align-self
:
flex-start
;
}
}
/* Scrollbar styling */
::-webkit-scrollbar
{
width
:
8px
;
}
::-webkit-scrollbar-track
{
background
:
var
(
--bg-secondary
);
}
::-webkit-scrollbar-thumb
{
background
:
var
(
--primary-light
);
border-radius
:
4px
;
}
::-webkit-scrollbar-thumb:hover
{
background
:
var
(
--primary-color
);
}
\ No newline at end of file
comment-system/static/src/load.js
0 → 100644
View file @
c0f46fb4
async
function
loadComments
()
{
try
{
const
response
=
await
fetch
(
'
http://localhost:8080/comment/get
'
);
const
result
=
await
response
.
json
();
// 检查业务状态码
if
(
result
.
code
!==
0
)
{
throw
new
Error
(
result
.
msg
||
'
未知错误
'
);
}
// 正确的数据结构访问
displayComments
(
result
.
data
.
comments
);
}
catch
(
error
)
{
console
.
error
(
'
加载评论错误:
'
,
error
);
alert
(
'
加载评论失败:
'
+
error
.
message
);
}
}
function
displayComments
(
comments
)
{
const
commentsContainer
=
document
.
getElementById
(
'
commentlist
'
);
commentsContainer
.
innerHTML
=
''
;
if
(
!
comments
||
comments
.
length
===
0
)
{
commentsContainer
.
innerHTML
=
'
<div class="no-comments">No Comments Yet</div>
'
;
return
;
}
comments
.
forEach
(
comment
=>
{
const
commentElement
=
document
.
createElement
(
'
li
'
);
commentElement
.
className
=
'
comment-item
'
;
commentElement
.
innerHTML
=
`
<div>
<img src='https://pic4.zhimg.com/v2-bf5f58e7b583cd69ac228db9fdff377f_r.jpg'
class='comment-avatar' alt='
${
comment
.
name
}
' />
<div class='comment-content'>
<div>
<span class='comment-meta'>
${
comment
.
name
}
</span>
<span class='comment-date'>
${
comment
.
created_at
}
</span>
</div>
<p>
${
comment
.
content
}
</p>
<div class='comment-delete'>
<button id = 'deleteButton' onclick="deleteComment(
${
comment
.
id
}
)">Delete</button>
</div>
</div>
</div>
`
;
commentsContainer
.
appendChild
(
commentElement
);
});
}
function
deleteComment
(
commentId
)
{
if
(
!
confirm
(
'
确定要删除这条评论吗?
'
))
{
return
;
}
fetch
(
`http://localhost:8080/comment/delete?id=
${
commentId
}
`
,
{
method
:
'
POST
'
,
})
.
then
(
response
=>
response
.
json
())
.
then
(
result
=>
{
if
(
result
.
code
!==
0
)
{
throw
new
Error
(
result
.
msg
||
'
删除失败
'
);
}
alert
(
'
评论已删除
'
);
loadComments
();
// 重新加载评论列表
})
.
catch
(
error
=>
{
console
.
error
(
'
删除评论错误:
'
,
error
);
alert
(
'
删除评论失败:
'
+
error
.
message
);
});
}
// 页面加载时调用
document
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
{
loadComments
();
});
\ No newline at end of file
comment-system/static/src/main.tsx
0 → 100644
View file @
c0f46fb4
import
{
StrictMode
}
from
'
react
'
import
{
createRoot
}
from
'
react-dom/client
'
import
AddComment
from
'
./App.tsx
'
import
DateTimeDisplay
from
'
./date.tsx
'
import
'
./index.css
'
const
profilePhoto
:
string
=
'
https://pic4.zhimg.com/v2-bf5f58e7b583cd69ac228db9fdff377f_r.jpg
'
createRoot
(
document
.
getElementById
(
'
root
'
)
!
).
render
(
<
StrictMode
>
<
div
>
<
h1
style
=
{
{
textAlign
:
'
center
'
}
}
>
Welcome To Xanadu`s Comment
</
h1
>
</
div
>
<
Input_Area
/>
<
div
className
=
'comment'
>
<
div
>
<
h3
style
=
{
{
textAlign
:
'
center
'
}
}
>
All Comment
</
h3
>
</
div
>
<
ul
id
=
'commentlist'
></
ul
>
</
div
>
</
StrictMode
>
)
function
Input_Area
()
{
return
(
<
div
className
=
'inputarea'
>
<
img
src
=
{
profilePhoto
}
alt
=
{
'
小黑子
'
}
style
=
{
{
width
:
'
40px
'
,
height
:
'
40px
'
,
borderRadius
:
'
50%
'
}
}
/>
<
DateTimeDisplay
/>
<
input
type
=
"text"
placeholder
=
"Please enter your name"
id
=
"nameInput"
/>
<
input
type
=
"text"
placeholder
=
"Please follow the Community Guidelines"
id
=
"textInput"
onKeyUpCapture
=
{
(
e
)
=>
{
const
name
:
string
=
(
document
.
getElementById
(
'
nameInput
'
)
as
HTMLInputElement
).
value
;
if
(
e
.
key
===
'
Enter
'
)
{
AddComment
({
name
,
profilePhoto
});
}
}
}
/>
<
button
id
=
"submitButton"
onClick
=
{
()
=>
AddComment
({
name
:
(
document
.
getElementById
(
'
nameInput
'
)
as
HTMLInputElement
).
value
,
profilePhoto
:
profilePhoto
})
}
>
Submit
</
button
>
</
div
>
)
}
// Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
\ No newline at end of file
comment-system/static/src/object.ts
0 → 100644
View file @
c0f46fb4
class
girlFriend
{
name
:
string
;
age
:
number
;
character
:
string
[];
height
:
number
;
weight
:
number
;
constructor
(
name
:
string
,
age
:
number
,
character
:
string
[],
height
:
number
,
weight
:
number
)
{
this
.
name
=
name
;
this
.
age
=
age
;
this
.
character
=
character
;
this
.
height
=
height
;
this
.
weight
=
weight
;
}
}
const
MyGirlFriend
=
new
girlFriend
(
"
小红
"
,
18
,
[
"
温柔
"
,
"
善良
"
],
160
,
50
);
console
.
log
(
MyGirlFriend
);
\ No newline at end of file
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment