mirror of
https://github.com/tnb-labs/panel.git
synced 2026-10-16 15:42:54 +08:00
- 新增 pkg/webserver/conf:指令、参数(含引号风格)、子块与注释的统一模型, 查询、修改与排序方法各方言共用,方法对 nil 安全便于链式取值 - nginx 去掉 gonginx,自写分词与解析:分号指令、花括号块、引号转义、行尾注释、 lua 块原样保留;vhost 主文件仍就地修改保留用户手写指令,片段改为构建语法树后渲染, map 迭代改为排序输出,缺失 ssl_protocols 时不再空指针 - apache、OLS、caddy 的解析器改为产出共享语法树,各自只保留分词与渲染 - nginx 应用的 stream 配置读写同步迁移 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
32 lines
765 B
Go
32 lines
765 B
Go
package conf
|
|
|
|
import "slices"
|
|
|
|
// Sort 按 key 稳定排序指令,注释与空行吸附到其后的指令一起移动,末尾孤立的注释保留在最后
|
|
func Sort(nodes []Node, key func(*Directive) int) []Node {
|
|
type group struct {
|
|
lead []Node
|
|
main *Directive
|
|
key int
|
|
}
|
|
var groups []group
|
|
var pending []Node
|
|
for _, n := range nodes {
|
|
d, ok := n.(*Directive)
|
|
if !ok {
|
|
pending = append(pending, n)
|
|
continue
|
|
}
|
|
groups = append(groups, group{lead: pending, main: d, key: key(d)})
|
|
pending = nil
|
|
}
|
|
slices.SortStableFunc(groups, func(a, b group) int { return a.key - b.key })
|
|
|
|
out := make([]Node, 0, len(nodes))
|
|
for _, g := range groups {
|
|
out = append(out, g.lead...)
|
|
out = append(out, g.main)
|
|
}
|
|
return append(out, pending...)
|
|
}
|