|
|
|
package util
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
|
"github.com/zeromicro/go-zero/tools/goctl/api/spec"
|
|
|
|
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
|
|
|
)
|
|
|
|
|
|
|
|
// MaybeCreateFile creates file if not exists
|
|
|
|
func MaybeCreateFile(dir, subdir, file string) (fp *os.File, created bool, err error) {
|
|
|
|
logx.Must(pathx.MkdirIfNotExist(path.Join(dir, subdir)))
|
|
|
|
fpath := path.Join(dir, subdir, file)
|
|
|
|
if pathx.FileExists(fpath) {
|
|
|
|
fmt.Printf("%s exists, ignored generation\n", fpath)
|
|
|
|
return nil, false, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
fp, err = pathx.CreateIfNotExist(fpath)
|
|
|
|
created = err == nil
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// WrapErr wraps an error with message
|
|
|
|
func WrapErr(err error, message string) error {
|
|
|
|
return errors.New(message + ", " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy calls io.Copy if the source file and destination file exists
|
|
|
|
func Copy(src, dst string) (int64, error) {
|
|
|
|
sourceFileStat, err := os.Stat(src)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if !sourceFileStat.Mode().IsRegular() {
|
|
|
|
return 0, fmt.Errorf("%s is not a regular file", src)
|
|
|
|
}
|
|
|
|
|
|
|
|
source, err := os.Open(src)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
defer source.Close()
|
|
|
|
|
|
|
|
destination, err := os.Create(dst)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
defer destination.Close()
|
|
|
|
nBytes, err := io.Copy(destination, source)
|
|
|
|
return nBytes, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// ComponentName returns component name for typescript
|
|
|
|
func ComponentName(api *spec.ApiSpec) string {
|
|
|
|
name := api.Service.Name
|
|
|
|
if strings.HasSuffix(name, "-api") {
|
|
|
|
return name[:len(name)-4] + "Components"
|
|
|
|
}
|
|
|
|
return name + "Components"
|
|
|
|
}
|
|
|
|
|
|
|
|
// WriteIndent writes tab spaces
|
|
|
|
func WriteIndent(writer io.Writer, indent int) {
|
|
|
|
for i := 0; i < indent; i++ {
|
|
|
|
fmt.Fprint(writer, "\t")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// RemoveComment filters comment content
|
|
|
|
func RemoveComment(line string) string {
|
|
|
|
commentIdx := strings.Index(line, "//")
|
|
|
|
if commentIdx >= 0 {
|
|
|
|
return strings.TrimSpace(line[:commentIdx])
|
|
|
|
}
|
|
|
|
return strings.TrimSpace(line)
|
|
|
|
}
|