Skip to content

Commit 7703982

Browse files
committed
chore: improve init config table
1 parent ac34a4f commit 7703982

3 files changed

Lines changed: 126 additions & 100 deletions

File tree

core/option.go

Lines changed: 105 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/chainreactors/words/mask"
2929
"github.com/chainreactors/words/rule"
3030
"github.com/charmbracelet/lipgloss"
31+
"github.com/charmbracelet/lipgloss/table"
3132
"github.com/expr-lang/expr"
3233
"github.com/vbauerster/mpb/v8"
3334
)
@@ -293,9 +294,6 @@ func (opt *Option) Prepare() error {
293294
pkg.UniqueStatus = pkg.ParseStatus(pkg.DefaultUniqueStatus, opt.UniqueStatus)
294295
}
295296

296-
logs.Log.Logf(pkg.LogVerbose, "Black Status: %v, WhiteStatus: %v, WAFStatus: %v", pkg.BlackStatus, pkg.WhiteStatus, pkg.WAFStatus)
297-
logs.Log.Logf(pkg.LogVerbose, "Fuzzy Status: %v, Unique Status: %v", pkg.FuzzyStatus, pkg.UniqueStatus)
298-
299297
return nil
300298
}
301299

@@ -488,73 +486,93 @@ func (opt *Option) NewRunner() (*Runner, error) {
488486

489487
func (opt *Option) PrintConfig(r *Runner) string {
490488
// 定义颜色样式
491-
keyStyle := lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("#FFFFFF")).Width(20) // Key 加粗并设定宽度
492-
stringValueStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFA07A")) // 字符串样式
493-
arrayValueStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#98FB98")) // 数组样式
494-
numberValueStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#ADD8E6")) // 数字样式
495-
panelWidth := 60 // 调整 panelWidth 使内容稍微靠左
496-
padding := 2 // 减少 padding 以调整布局靠左
497-
498-
// 分割线样式和终端宽度计算
499-
divider := strings.Repeat("─", panelWidth) // 使用"─"符号生成更加连贯的分割线
489+
keyStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#87CEEB")).Bold(true)
490+
stringValueStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFA07A"))
491+
arrayValueStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#98FB98"))
492+
numberValueStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("#FFD700"))
500493

501-
// 处理不同类型的值
494+
// 格式化值的辅助函数
502495
formatValue := func(value interface{}) string {
503496
switch v := value.(type) {
504497
case string:
498+
if v == "" {
499+
return stringValueStyle.Render("-")
500+
}
505501
return stringValueStyle.Render(v)
506502
case []string:
503+
if len(v) == 0 {
504+
return arrayValueStyle.Render("-")
505+
}
507506
return arrayValueStyle.Render(fmt.Sprintf("%v", v))
508-
case int, int64, float64:
507+
case int, int64:
508+
return numberValueStyle.Render(fmt.Sprintf("%v", v))
509+
case float64:
510+
return numberValueStyle.Render(fmt.Sprintf("%v", v))
511+
case bool:
509512
return numberValueStyle.Render(fmt.Sprintf("%v", v))
510513
default:
511-
return stringValueStyle.Render(fmt.Sprintf("%v", v)) // 默认为字符串样式
514+
return stringValueStyle.Render(fmt.Sprintf("%v", v))
512515
}
513516
}
514517

515-
// 处理互斥参数,选择输出有值的那一个
516-
inputSource := ""
518+
// 收集所有配置行
519+
var rows [][]string
520+
521+
// Input Source (互斥参数)
517522
if opt.ResumeFrom != "" {
518-
inputSource = lipgloss.JoinHorizontal(lipgloss.Left, "🌀 ", keyStyle.Render("ResumeFrom: "), formatValue(opt.ResumeFrom))
523+
rows = append(rows, []string{keyStyle.Render("🌀 ResumeFrom"), formatValue(opt.ResumeFrom)})
519524
} else if len(opt.URL) > 0 {
520-
inputSource = lipgloss.JoinHorizontal(lipgloss.Left, "🌐 ", keyStyle.Render("URL: "), formatValue(opt.URL))
525+
rows = append(rows, []string{keyStyle.Render("🌐 URL"), formatValue(opt.URL)})
521526
} else if opt.URLFile != "" {
522-
inputSource = lipgloss.JoinHorizontal(lipgloss.Left, "📂 ", keyStyle.Render("URLFile: "), formatValue(opt.URLFile))
527+
rows = append(rows, []string{keyStyle.Render("📂 URLFile"), formatValue(opt.URLFile)})
523528
} else if len(opt.CIDRs) > 0 {
524-
inputSource = lipgloss.JoinHorizontal(lipgloss.Left, "📡 ", keyStyle.Render("CIDRs: "), formatValue(opt.CIDRs))
529+
rows = append(rows, []string{keyStyle.Render("📡 CIDRs"), formatValue(opt.CIDRs)})
525530
} else if opt.RawFile != "" {
526-
inputSource = lipgloss.JoinHorizontal(lipgloss.Left, "📄 ", keyStyle.Render("RawFile: "), formatValue(opt.RawFile))
531+
rows = append(rows, []string{keyStyle.Render("📄 RawFile"), formatValue(opt.RawFile)})
527532
}
528533

529534
// Input Options
530-
inputOptions := lipgloss.JoinVertical(lipgloss.Left,
531-
inputSource, // 互斥量处理
532-
533-
// PortRange 展示
534-
lipgloss.JoinHorizontal(lipgloss.Left, "🔢 ", keyStyle.Render("PortRange: "), formatValue(opt.PortRange)),
535-
536-
// Dictionaries 展示
537-
lipgloss.JoinHorizontal(lipgloss.Left, "📚 ", keyStyle.Render("Dictionaries: "), formatValue(opt.Dictionaries)),
538-
539-
// Word, Rules, FilterRule 展开为单独的行
540-
lipgloss.JoinVertical(lipgloss.Left,
541-
lipgloss.JoinHorizontal(lipgloss.Left, "💡 ", keyStyle.Render("Word: "), formatValue(r.Word)),
542-
lipgloss.JoinHorizontal(lipgloss.Left, "📜 ", keyStyle.Render("Rules: "), formatValue(opt.Rules)),
543-
lipgloss.JoinHorizontal(lipgloss.Left, "🔍 ", keyStyle.Render("FilterRule: "), formatValue(opt.FilterRule)),
544-
),
545-
546-
// AppendRule 和 AppendWords 展开为单独的行
547-
lipgloss.JoinVertical(lipgloss.Left,
548-
lipgloss.JoinHorizontal(lipgloss.Left, "🔧 ", keyStyle.Render("AppendRule: "), formatValue(r.AppendRule)),
549-
lipgloss.JoinHorizontal(lipgloss.Left, "🧩 ", keyStyle.Render("AppendWords: "), formatValue(len(r.AppendWords))),
550-
),
551-
)
535+
if opt.PortRange != "" {
536+
rows = append(rows, []string{keyStyle.Render("🔢 PortRange"), formatValue(opt.PortRange)})
537+
}
538+
if len(opt.Dictionaries) > 0 {
539+
rows = append(rows, []string{keyStyle.Render("📚 Dictionaries"), formatValue(opt.Dictionaries)})
540+
}
541+
if r.Word != "" {
542+
rows = append(rows, []string{keyStyle.Render("💡 Word"), formatValue(r.Word)})
543+
}
544+
if len(opt.Rules) > 0 {
545+
rows = append(rows, []string{keyStyle.Render("📜 Rules"), formatValue(opt.Rules)})
546+
}
547+
if opt.FilterRule != "" {
548+
rows = append(rows, []string{keyStyle.Render("🔍 FilterRule"), formatValue(opt.FilterRule)})
549+
}
550+
if r.AppendRules != nil && len(r.AppendRules.Expressions) > 0 {
551+
rows = append(rows, []string{keyStyle.Render("🔧 AppendRule"), formatValue(len(r.AppendRules.Expressions))})
552+
}
553+
if len(r.AppendWords) > 0 {
554+
rows = append(rows, []string{keyStyle.Render("🧩 AppendWords"), formatValue(len(r.AppendWords))})
555+
}
552556

553557
// Output Options
554-
outputOptions := lipgloss.JoinVertical(lipgloss.Left,
555-
lipgloss.JoinHorizontal(lipgloss.Left, "📊 ", keyStyle.Render("Match: "), formatValue(opt.Match)),
556-
lipgloss.JoinHorizontal(lipgloss.Left, "⚙️ ", keyStyle.Render("Filter: "), formatValue(opt.Filter)),
557-
)
558+
if opt.Match != "" {
559+
rows = append(rows, []string{keyStyle.Render("📊 Match"), formatValue(opt.Match)})
560+
}
561+
if opt.Filter != "" {
562+
rows = append(rows, []string{keyStyle.Render("⚙️ Filter"), formatValue(opt.Filter)})
563+
}
564+
if opt.OutputFile != "" {
565+
rows = append(rows, []string{keyStyle.Render("📝 OutputFile"), formatValue(opt.OutputFile)})
566+
}
567+
if opt.DumpFile != "" {
568+
rows = append(rows, []string{keyStyle.Render("💾 DumpFile"), formatValue(opt.DumpFile)})
569+
}
570+
if !opt.NoStat && r.StatFile != nil {
571+
rows = append(rows, []string{keyStyle.Render("📈 StatFile"), formatValue(r.StatFile.Filename)})
572+
}
573+
if opt.Fuzzy {
574+
rows = append(rows, []string{keyStyle.Render("🔀 Fuzzy"), formatValue(opt.Fuzzy)})
575+
}
558576

559577
// Plugin Options
560578
pluginValues := []string{}
@@ -576,49 +594,50 @@ func (opt *Option) PrintConfig(r *Runner) string {
576594
if opt.CrawlPlugin {
577595
pluginValues = append(pluginValues, "crawl")
578596
}
597+
if opt.Finger {
598+
pluginValues = append(pluginValues, "finger")
599+
}
579600

580-
pluginOptions := lipgloss.JoinVertical(lipgloss.Left,
581-
lipgloss.JoinHorizontal(lipgloss.Left, "🔎 ", keyStyle.Render("Extracts: "), formatValue(opt.Extracts)),
582-
lipgloss.JoinHorizontal(lipgloss.Left, "🔌 ", keyStyle.Render("Plugins: "), formatValue(strings.Join(pluginValues, ", "))),
583-
)
601+
if len(opt.Extracts) > 0 {
602+
rows = append(rows, []string{keyStyle.Render("🔎 Extracts"), formatValue(opt.Extracts)})
603+
}
604+
if len(pluginValues) > 0 {
605+
rows = append(rows, []string{keyStyle.Render("🔌 Plugins"), formatValue(strings.Join(pluginValues, ", "))})
606+
}
584607

585608
// Mode Options
586-
modeOptions := lipgloss.JoinVertical(lipgloss.Left,
587-
lipgloss.JoinHorizontal(lipgloss.Left, "🛑 ", keyStyle.Render("BlackStatus: "), formatValue(pkg.BlackStatus)),
588-
lipgloss.JoinHorizontal(lipgloss.Left, "✅ ", keyStyle.Render("WhiteStatus: "), formatValue(pkg.WhiteStatus)),
589-
lipgloss.JoinHorizontal(lipgloss.Left, "🔄 ", keyStyle.Render("FuzzyStatus: "), formatValue(pkg.FuzzyStatus)),
590-
lipgloss.JoinHorizontal(lipgloss.Left, "🔒 ", keyStyle.Render("UniqueStatus: "), formatValue(pkg.UniqueStatus)),
591-
lipgloss.JoinHorizontal(lipgloss.Left, "🔑 ", keyStyle.Render("Unique: "), formatValue(opt.Unique)),
592-
)
609+
rows = append(rows, []string{keyStyle.Render("🛑 BlackStatus"), formatValue(pkg.BlackStatus)})
610+
rows = append(rows, []string{keyStyle.Render("✅ WhiteStatus"), formatValue(pkg.WhiteStatus)})
611+
rows = append(rows, []string{keyStyle.Render("🔄 FuzzyStatus"), formatValue(pkg.FuzzyStatus)})
612+
rows = append(rows, []string{keyStyle.Render("🔒 UniqueStatus"), formatValue(pkg.UniqueStatus)})
613+
if opt.Unique {
614+
rows = append(rows, []string{keyStyle.Render("🔑 Unique"), formatValue(opt.Unique)})
615+
}
616+
if opt.Depth > 0 {
617+
rows = append(rows, []string{keyStyle.Render("🌳 Depth"), formatValue(opt.Depth)})
618+
}
593619

594620
// Misc Options
595-
miscOptions := lipgloss.JoinVertical(lipgloss.Left,
596-
lipgloss.JoinHorizontal(lipgloss.Left, "⏱ ", keyStyle.Render("Timeout: "), formatValue(opt.Timeout)),
597-
lipgloss.JoinHorizontal(lipgloss.Left, "📈 ", keyStyle.Render("PoolSize: "), formatValue(opt.PoolSize)),
598-
lipgloss.JoinHorizontal(lipgloss.Left, "🧵 ", keyStyle.Render("Threads: "), formatValue(opt.Threads)),
599-
lipgloss.JoinHorizontal(lipgloss.Left, "🌍 ", keyStyle.Render("Proxies: "), formatValue(opt.Proxies)),
600-
)
601-
602-
// 将所有内容拼接在一起
603-
content := lipgloss.JoinVertical(lipgloss.Left,
604-
inputOptions,
605-
outputOptions,
606-
pluginOptions,
607-
modeOptions,
608-
miscOptions,
609-
)
610-
611-
// 使用正确的方式添加 padding,并居中显示内容
612-
contentWithPadding := lipgloss.NewStyle().PaddingLeft(padding).Render(content)
613-
614-
// 使用 Place 方法来将整个内容居中显示
615-
return lipgloss.Place(panelWidth+padding*2, 0, lipgloss.Center, lipgloss.Center,
616-
lipgloss.JoinVertical(lipgloss.Center,
617-
divider, // 顶部分割线
618-
contentWithPadding,
619-
divider, // 底部分割线
620-
),
621-
)
621+
rows = append(rows, []string{keyStyle.Render("⏱ Timeout"), formatValue(fmt.Sprintf("%ds", opt.Timeout))})
622+
rows = append(rows, []string{keyStyle.Render("🏊 PoolSize"), formatValue(opt.PoolSize)})
623+
rows = append(rows, []string{keyStyle.Render("🧵 Threads"), formatValue(opt.Threads)})
624+
if len(opt.Proxies) > 0 {
625+
rows = append(rows, []string{keyStyle.Render("🌍 Proxies"), formatValue(opt.Proxies)})
626+
}
627+
if opt.RateLimit > 0 {
628+
rows = append(rows, []string{keyStyle.Render("⚡ RateLimit"), formatValue(fmt.Sprintf("%d/s", opt.RateLimit))})
629+
}
630+
631+
// 创建表格
632+
t := table.New().
633+
Border(lipgloss.RoundedBorder()).
634+
BorderStyle(lipgloss.NewStyle().Foreground(lipgloss.Color("99"))).
635+
StyleFunc(func(row, col int) lipgloss.Style {
636+
return lipgloss.NewStyle().Padding(0, 1)
637+
}).
638+
Rows(rows...)
639+
640+
return t.String()
622641
}
623642

624643
func (opt *Option) BuildPlugin(r *Runner) error {

go.mod

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/chainreactors/proxyclient v1.0.3-0.20250219180226-a25a0c9e6ac8
1111
github.com/chainreactors/utils v0.0.0-20250831165528-f06246b0f311
1212
github.com/chainreactors/words v0.0.0-20241002061906-25d8893158d9
13-
github.com/charmbracelet/lipgloss v0.13.0
13+
github.com/charmbracelet/lipgloss v1.1.0
1414
github.com/expr-lang/expr v1.16.9
1515
github.com/gookit/config/v2 v2.2.5
1616
github.com/jessevdk/go-flags v1.6.1
@@ -27,7 +27,10 @@ require (
2727
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
2828
github.com/andybalholm/brotli v1.1.0 // indirect
2929
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
30-
github.com/charmbracelet/x/ansi v0.1.4 // indirect
30+
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc // indirect
31+
github.com/charmbracelet/x/ansi v0.8.0 // indirect
32+
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd // indirect
33+
github.com/charmbracelet/x/term v0.2.1 // indirect
3134
github.com/dlclark/regexp2 v1.11.5 // indirect
3235
github.com/facebookincubator/nvdtools v0.1.5 // indirect
3336
github.com/fatih/color v1.17.0 // indirect
@@ -42,10 +45,10 @@ require (
4245
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
4346
github.com/mattn/go-colorable v0.1.13 // indirect
4447
github.com/mattn/go-isatty v0.0.20 // indirect
45-
github.com/mattn/go-runewidth v0.0.15 // indirect
48+
github.com/mattn/go-runewidth v0.0.16 // indirect
4649
github.com/mitchellh/mapstructure v1.5.0 // indirect
4750
github.com/mozillazg/go-pinyin v0.20.0 // indirect
48-
github.com/muesli/termenv v0.15.2 // indirect
51+
github.com/muesli/termenv v0.16.0 // indirect
4952
github.com/pkg/errors v0.9.1 // indirect
5053
github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect
5154
github.com/rivo/uniseg v0.4.7 // indirect

go.sum

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ github.com/chainreactors/files v0.0.0-20231123083421-cea5b4ad18a8/go.mod h1:/Xa9
9191
github.com/chainreactors/files v0.0.0-20240716182835-7884ee1e77f0 h1:cU3sGEODXZsUZGBXfnz0nyxF6+37vA+ZGDx6L/FKN4o=
9292
github.com/chainreactors/files v0.0.0-20240716182835-7884ee1e77f0/go.mod h1:NSxGNMRWryAyrDzZpVwmujI22wbGw6c52bQOd5zEvyU=
9393
github.com/chainreactors/fingers v0.0.0-20240702104653-a66e34aa41df/go.mod h1:l8AO6ZbIL8WQ8PkihCK/MD6Iww/O+LY/osAhRJjThs4=
94-
github.com/chainreactors/fingers v1.0.2-0.20251202165109-ce668e80a672 h1:yEqiHDT90hA4sw8MAYSf0fU8AsgSwL01kLV5EvBmMGE=
95-
github.com/chainreactors/fingers v1.0.2-0.20251202165109-ce668e80a672/go.mod h1:DzQq5oZXp6xSLU8NkqtrzauH4raFSHf5lhm8qZthdok=
9694
github.com/chainreactors/fingers v1.0.2-0.20251204155422-314b5907e607 h1:MpHfsEiBN68mAsMAtEMdNGLLa+Ulg6BAYj/Ks83VDPA=
9795
github.com/chainreactors/fingers v1.0.2-0.20251204155422-314b5907e607/go.mod h1:DzQq5oZXp6xSLU8NkqtrzauH4raFSHf5lhm8qZthdok=
9896
github.com/chainreactors/logs v0.0.0-20240207121836-c946f072f81f/go.mod h1:6Mv6W70JrtL6VClulZhmMRZnoYpcTahcDTKLMNEjK0o=
@@ -109,10 +107,16 @@ github.com/chainreactors/utils v0.0.0-20250831165528-f06246b0f311 h1:kyN5csx/tbA
109107
github.com/chainreactors/utils v0.0.0-20250831165528-f06246b0f311/go.mod h1:LajXuvESQwP+qCMAvlcoSXppQCjuLlBrnQpu9XQ1HtU=
110108
github.com/chainreactors/words v0.0.0-20241002061906-25d8893158d9 h1:BXaPgD1pfBPvFSy9DHZDxW0bHX96ONZT6HW+WbXlZCk=
111109
github.com/chainreactors/words v0.0.0-20241002061906-25d8893158d9/go.mod h1:zfz367PUmyaX6oAqV9SktVqyRXKlEh0sel9Wsq9dd2c=
112-
github.com/charmbracelet/lipgloss v0.13.0 h1:4X3PPeoWEDCMvzDvGmTajSyYPcZM4+y8sCA/SsA3cjw=
113-
github.com/charmbracelet/lipgloss v0.13.0/go.mod h1:nw4zy0SBX/F/eAO1cWdcvy6qnkDUxr8Lw7dvFrAIbbY=
114-
github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831KfiLM=
115-
github.com/charmbracelet/x/ansi v0.1.4/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw=
110+
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc h1:4pZI35227imm7yK2bGPcfpFEmuY1gc2YSTShr4iJBfs=
111+
github.com/charmbracelet/colorprofile v0.2.3-0.20250311203215-f60798e515dc/go.mod h1:X4/0JoqgTIPSFcRA/P6INZzIuyqdFY5rm8tb41s9okk=
112+
github.com/charmbracelet/lipgloss v1.1.0 h1:vYXsiLHVkK7fp74RkV7b2kq9+zDLoEU4MZoFqR/noCY=
113+
github.com/charmbracelet/lipgloss v1.1.0/go.mod h1:/6Q8FR2o+kj8rz4Dq0zQc3vYf7X+B0binUUBwA0aL30=
114+
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
115+
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
116+
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd h1:vy0GVL4jeHEwG5YOXDmi86oYw2yuYUGqz6a8sLwg0X8=
117+
github.com/charmbracelet/x/cellbuf v0.0.13-0.20250311204145-2c3ea96c31dd/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs=
118+
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
119+
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
116120
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
117121
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
118122
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -360,8 +364,8 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
360364
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
361365
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
362366
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
363-
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
364-
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
367+
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
368+
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
365369
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
366370
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
367371
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
@@ -381,8 +385,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
381385
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
382386
github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ=
383387
github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
384-
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
385-
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
388+
github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc=
389+
github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk=
386390
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
387391
github.com/panjf2000/ants/v2 v2.9.1 h1:Q5vh5xohbsZXGcD6hhszzGqB7jSSc2/CRr3QKIga8Kw=
388392
github.com/panjf2000/ants/v2 v2.9.1/go.mod h1:7ZxyxsqE4vvW0M7LSD8aI3cKwgFhBHbxnlN8mDqHa1I=

0 commit comments

Comments
 (0)