mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
144 lines
3.3 KiB
Go
144 lines
3.3 KiB
Go
package ice
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
|
|
kit "shylinux.com/x/toolkits"
|
|
)
|
|
|
|
type MakeInfo struct {
|
|
Path string
|
|
Time string
|
|
Hash string
|
|
Module string
|
|
Remote string
|
|
Branch string
|
|
Domain string
|
|
Version string
|
|
HostName string
|
|
UserName string
|
|
}
|
|
|
|
var Info = struct {
|
|
Make MakeInfo
|
|
|
|
HostName string
|
|
PathName string
|
|
UserName string
|
|
PassWord string
|
|
|
|
Colors bool
|
|
Domain string
|
|
NodeType string
|
|
NodeName string
|
|
CtxShare string
|
|
CtxRiver string
|
|
|
|
Help string
|
|
cans string
|
|
Route map[string]string // 路由命令
|
|
File map[string]string // 文件命令
|
|
Pack map[string][]byte // 打包文件
|
|
names Map
|
|
|
|
render map[string]func(*Message, string, ...Any) string
|
|
Dump func(w io.Writer, name string, cb func(string)) bool
|
|
Log func(m *Message, p, l, s string)
|
|
}{
|
|
Help: `
|
|
^_^ 欢迎使用冰山框架 ^_^
|
|
^_^ Welcome to Icebergs World ^_^
|
|
|
|
report: shylinuxc@gmail.com
|
|
server: https://shylinux.com
|
|
source: https://shylinux.com/x/icebergs
|
|
`,
|
|
cans: `<!DOCTYPE html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
|
<link rel="stylesheet" type="text/css" href="/page/can.css">
|
|
</head>
|
|
<body>
|
|
<script src="/page/can.js"></script>
|
|
<script>can(%s)</script>
|
|
</body>
|
|
`,
|
|
Route: map[string]string{},
|
|
File: map[string]string{},
|
|
Pack: map[string][]byte{},
|
|
names: Map{},
|
|
|
|
render: map[string]func(*Message, string, ...Any) string{},
|
|
Dump: func(w io.Writer, name string, cb func(string)) bool { return false },
|
|
Log: func(m *Message, p, l, s string) {},
|
|
}
|
|
|
|
func FileURI(dir string) string {
|
|
if strings.Contains(dir, "go/pkg/mod") {
|
|
return path.Join("/require", strings.Split(dir, "go/pkg/mod")[1])
|
|
}
|
|
if Info.Make.Path != "" && strings.HasPrefix(dir, Info.Make.Path+PS) {
|
|
dir = strings.TrimPrefix(dir, Info.Make.Path+PS)
|
|
}
|
|
if strings.HasPrefix(dir, kit.Path("")+PS) {
|
|
dir = strings.TrimPrefix(dir, kit.Path("")+PS)
|
|
}
|
|
if strings.HasPrefix(dir, SRC) {
|
|
return path.Join("/require", dir)
|
|
}
|
|
if strings.HasPrefix(dir, USR) {
|
|
return path.Join("/require", dir)
|
|
}
|
|
if kit.FileExists(path.Join("src", dir)) {
|
|
return path.Join("/require/src/", dir)
|
|
}
|
|
return dir
|
|
}
|
|
func FileCmd(dir string) string {
|
|
dir = strings.Split(dir, DF)[0]
|
|
dir = strings.ReplaceAll(dir, ".js", ".go")
|
|
dir = strings.ReplaceAll(dir, ".sh", ".go")
|
|
return FileURI(dir)
|
|
}
|
|
func AddFileCmd(dir, key string) {
|
|
Info.File[FileCmd(dir)] = key
|
|
}
|
|
func GetFileCmd(dir string) string {
|
|
if strings.HasPrefix(dir, "require/") {
|
|
dir = "/" + dir
|
|
}
|
|
for _, dir := range []string{dir, "/require/" + Info.Make.Module + "/" + dir, "/require/" + Info.Make.Module + "/src/" + dir} {
|
|
if cmd, ok := Info.File[FileCmd(dir)]; ok {
|
|
return cmd
|
|
}
|
|
p := path.Dir(dir)
|
|
if cmd, ok := Info.File[FileCmd(path.Join(p, path.Base(p)+".go"))]; ok {
|
|
return cmd
|
|
}
|
|
for k, v := range Info.File {
|
|
if strings.HasPrefix(k, p) {
|
|
return v
|
|
}
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
func FileRequire(n int) string {
|
|
p := kit.Split(kit.FileLine(n, 100), DF)[0]
|
|
if strings.Contains(p, "go/pkg/mod") {
|
|
return path.Join("/require", strings.Split(p, "go/pkg/mod")[1])
|
|
}
|
|
return path.Join("/require/"+kit.ModPath(n), path.Base(p))
|
|
}
|
|
func Getenv(key string) string {
|
|
switch key {
|
|
case "ctx_daemon":
|
|
return kit.Select("ctx,log,gdb,ssh", os.Getenv(key))
|
|
}
|
|
return os.Getenv(key)
|
|
}
|