gojs/makeGoja/main.go
Star f37b64c2df many update
support pool
2024-10-07 23:02:11 +08:00

105 lines
3.0 KiB
Go

package main
import (
"fmt"
"github.com/ssgo/u"
"os"
"path/filepath"
"strings"
)
func main() {
homeDir, _ := os.UserHomeDir()
if !u.FileExists("../gojs.go") {
fmt.Println(u.Red("请在gojs的项目跟目录中运行"))
return
}
r, err := u.RunCommand("go", "get", "-u", "github.com/dop251/goja")
fmt.Println(err)
fmt.Println(strings.Join(r, "\n"))
r, err = u.RunCommand("go", "get", "-u", "github.com/dop251/goja_nodejs")
fmt.Println(err)
fmt.Println(strings.Join(r, "\n"))
r, err = u.RunCommand("go", "get", "-u", "github.com/dop251/base64dec")
fmt.Println(err)
fmt.Println(strings.Join(r, "\n"))
gojaPkgPath := ""
gojaPkgVer := int64(0)
gojaNodejsPkgPath := ""
gojaNodejsPkgVer := int64(0)
gojaB64PkgPath := ""
gojaB64PkgVer := int64(0)
for _, f := range u.ReadDirN(homeDir + "/go/pkg/mod/github.com/dop251/") {
if f.IsDir && strings.HasPrefix(f.Name, "goja@") {
a := strings.Split(f.Name, "-")
ver := u.Int64(a[1])
if ver > gojaPkgVer {
gojaPkgPath = f.FullName
gojaPkgVer = ver
}
} else if f.IsDir && strings.HasPrefix(f.Name, "goja_nodejs@") {
a := strings.Split(f.Name, "-")
ver := u.Int64(a[1])
if ver > gojaNodejsPkgVer {
gojaNodejsPkgPath = f.FullName
gojaNodejsPkgVer = ver
}
} else if f.IsDir && strings.HasPrefix(f.Name, "base64dec@") {
a := strings.Split(f.Name, "-")
ver := u.Int64(a[1])
if ver > gojaB64PkgVer {
gojaB64PkgPath = f.FullName
gojaB64PkgVer = ver
}
}
}
_ = os.RemoveAll("../dop251")
u.CopyFile(gojaPkgPath, "../dop251/goja")
_ = os.Remove("../dop251/goja/go.mod")
_ = os.Remove("../dop251/goja/go.sum")
replacePackage("../dop251/goja")
u.CopyFile(gojaNodejsPkgPath, "../dop251/goja_nodejs")
_ = os.Remove("../dop251/goja_nodejs/go.mod")
_ = os.Remove("../dop251/goja_nodejs/go.sum")
replacePackage("../dop251/goja_nodejs")
u.CopyFile(gojaB64PkgPath, "../dop251/base64dec")
_ = os.Remove("../dop251/base64dec/go.mod")
_ = os.Remove("../dop251/base64dec/go.sum")
replacePackage("../dop251/base64dec")
_ = os.Chdir("..")
r, err = u.RunCommand("go", "mod", "tidy")
fmt.Println(err)
fmt.Println(strings.Join(r, "\n"))
}
func replacePackage(root string) {
for _, f := range u.ReadDirN(root) {
if f.IsDir {
if !strings.HasPrefix(f.Name, ".") {
replacePackage(filepath.Join(f.FullName))
} else {
_ = os.RemoveAll(f.FullName)
}
} else if strings.HasSuffix(f.Name, ".go") && !strings.HasSuffix(f.Name, "_test.go") {
str := u.ReadFileN(f.FullName)
if strings.Contains(str, "github.com/dop251/") {
str = strings.ReplaceAll(str, "github.com/dop251/", "apigo.cc/apigo/gojs/dop251/")
if strings.HasSuffix(f.FullName, "/dop251/goja/runtime.go") {
str = strings.ReplaceAll(str, "\"strconv\"", "\"strconv\"\n\t\"sync\"")
str = strings.ReplaceAll(str, "type Runtime struct {", "type Runtime struct {\n\tGoData map[string]any\n\tLocker sync.Mutex\n\tCallbackLocker sync.Mutex")
}
_ = u.WriteFile(f.FullName, str)
fmt.Println(u.BGreen("文件更新"), u.Green(f.FullName))
}
} else {
_ = os.Remove(f.FullName)
}
}
}