升级异常处理机制
This commit is contained in:
parent
16832cb71a
commit
6bdbcde246
116
file.go
116
file.go
@ -43,9 +43,12 @@ func init() {
|
||||
"mkdir": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
if err := os.MkdirAll(args.Path(0), 0755); err != nil {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue(false)
|
||||
}
|
||||
return nil
|
||||
return vm.ToValue(true)
|
||||
},
|
||||
"read": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
@ -53,7 +56,10 @@ func init() {
|
||||
if r, err := u.ReadFile(filename); err == nil {
|
||||
return vm.ToValue(r)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue("")
|
||||
}
|
||||
},
|
||||
"readBytes": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
@ -61,30 +67,45 @@ func init() {
|
||||
if r, err := u.ReadFileBytes(args.Path(0)); err == nil {
|
||||
return vm.ToValue(r)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue([]byte{})
|
||||
}
|
||||
},
|
||||
"write": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(2)
|
||||
filename := args.Path(0)
|
||||
if err := u.WriteFileBytes(filename, args.Bytes(1)); err == nil {
|
||||
return nil
|
||||
return vm.ToValue(true)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue(false)
|
||||
}
|
||||
},
|
||||
"dir": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
if r, err := u.ReadDir(args.Path(0)); err == nil {
|
||||
list := make([]map[string]any, len(r))
|
||||
for i, info := range r {
|
||||
list[i] = makeFileInfo(&info)
|
||||
}
|
||||
if list, err := listFile(args.Path(0), []map[string]any{}, args.Bool(1)); err == nil {
|
||||
return vm.ToValue(list)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue([]map[string]any{})
|
||||
}
|
||||
},
|
||||
"join": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
parts := args.StrArray(0)
|
||||
if os.PathSeparator != '/' {
|
||||
for i := range parts {
|
||||
parts[i] = strings.ReplaceAll(parts[i], "/", string(os.PathSeparator))
|
||||
}
|
||||
}
|
||||
return vm.ToValue(filepath.Join(parts...))
|
||||
},
|
||||
"stat": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
return vm.ToValue(makeFileInfo(u.GetFileInfo(args.Path(0))))
|
||||
@ -96,25 +117,34 @@ func init() {
|
||||
"remove": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(1)
|
||||
if err := os.RemoveAll(args.Path(0)); err == nil {
|
||||
return nil
|
||||
return vm.ToValue(true)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue(false)
|
||||
}
|
||||
},
|
||||
"rename": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(2)
|
||||
if err := os.Rename(args.Path(0), args.Path(1)); err == nil {
|
||||
return nil
|
||||
return vm.ToValue(true)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue(false)
|
||||
}
|
||||
},
|
||||
"copy": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
args := gojs.MakeArgs(&argsIn, vm).Check(2)
|
||||
if err := u.CopyFile(args.Path(0), args.Path(1)); err == nil {
|
||||
return nil
|
||||
return vm.ToValue(true)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue(false)
|
||||
}
|
||||
},
|
||||
"cache": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
@ -193,11 +223,17 @@ func init() {
|
||||
}
|
||||
if err == nil {
|
||||
if err = u.WriteFileBytes(gojs.FixPath(vm, filename), data); err != nil {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return vm.ToValue(false)
|
||||
}
|
||||
return nil
|
||||
return vm.ToValue(true)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return nil
|
||||
}
|
||||
},
|
||||
"load": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
@ -213,10 +249,16 @@ func init() {
|
||||
if err == nil {
|
||||
return vm.ToValue(r)
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
vm.SetData("_lastError", err)
|
||||
gojs.GetLogger(vm).Error(err.Error())
|
||||
return nil
|
||||
}
|
||||
},
|
||||
}
|
||||
@ -232,14 +274,32 @@ func init() {
|
||||
|
||||
func makeFileInfo(info *u.FileInfo) map[string]any {
|
||||
return map[string]any{
|
||||
"name": info.Name,
|
||||
"size": info.Size,
|
||||
"fullName": info.FullName,
|
||||
"isDir": info.IsDir,
|
||||
"modTime": info.ModTime.UnixMilli(),
|
||||
"name": info.Name,
|
||||
"size": info.Size,
|
||||
"path": info.FullName,
|
||||
"isDir": info.IsDir,
|
||||
"modTime": info.ModTime.UnixMilli(),
|
||||
}
|
||||
}
|
||||
|
||||
func listFile(rootPath string, list []map[string]any, recursive bool) ([]map[string]any, error) {
|
||||
var outErr error
|
||||
if r, err := u.ReadDir(rootPath); err == nil {
|
||||
for _, info := range r {
|
||||
list = append(list, makeFileInfo(&info))
|
||||
if recursive && info.IsDir {
|
||||
list, err = listFile(info.FullName, list, recursive)
|
||||
if err != nil {
|
||||
outErr = err
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
outErr = err
|
||||
}
|
||||
return list, outErr
|
||||
}
|
||||
|
||||
func searchFile(vm *goja.Runtime, searchPath, name string) string {
|
||||
searchPath = gojs.FixPath(vm, searchPath)
|
||||
|
||||
|
||||
48
file.ts
48
file.ts
@ -1,22 +1,23 @@
|
||||
// just for develop
|
||||
|
||||
export default {
|
||||
exists,
|
||||
mkdir,
|
||||
read,
|
||||
readBytes,
|
||||
write,
|
||||
dir,
|
||||
stat,
|
||||
find,
|
||||
remove,
|
||||
rename,
|
||||
copy,
|
||||
cache,
|
||||
load,
|
||||
save,
|
||||
searchFile,
|
||||
loadConfig
|
||||
exists,
|
||||
mkdir,
|
||||
read,
|
||||
readBytes,
|
||||
write,
|
||||
dir,
|
||||
join,
|
||||
stat,
|
||||
find,
|
||||
remove,
|
||||
rename,
|
||||
copy,
|
||||
cache,
|
||||
load,
|
||||
save,
|
||||
searchFile,
|
||||
loadConfig
|
||||
}
|
||||
|
||||
function exists(filename: string): boolean { return false }
|
||||
@ -24,7 +25,8 @@ function mkdir(filename: string): void { }
|
||||
function read(filename: string): string { return '' }
|
||||
function readBytes(filename: string): any { return null }
|
||||
function write(filename: string, data: any): void { }
|
||||
function dir(filename: string): Array<FileInfo> { return null as any }
|
||||
function dir(filename: string, recursive?: boolean): Array<FileInfo> { return null as any }
|
||||
function join(...paths: string[]): string { return '' }
|
||||
function stat(filename: string): FileInfo { return null as any }
|
||||
function find(filename: string): string { return '' }
|
||||
function remove(filename: string): void { }
|
||||
@ -36,10 +38,10 @@ function save(filename: string, data: any) { }
|
||||
function searchFile(filename: string, searchPath?: string): string { return '' }
|
||||
function loadConfig(name: string): any { return null }
|
||||
|
||||
interface FileInfo {
|
||||
name: string
|
||||
fullName: string
|
||||
isDir: boolean
|
||||
size: number
|
||||
modTime: number
|
||||
export interface FileInfo {
|
||||
name: string
|
||||
fullName: string
|
||||
isDir: boolean
|
||||
size: number
|
||||
modTime: number
|
||||
}
|
||||
|
||||
8
go.mod
8
go.mod
@ -3,7 +3,7 @@ module apigo.cc/gojs/file
|
||||
go 1.24.0
|
||||
|
||||
require (
|
||||
apigo.cc/gojs v0.0.30
|
||||
apigo.cc/gojs v0.0.32
|
||||
apigo.cc/gojs/console v0.0.4
|
||||
github.com/ssgo/u v1.7.23
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
@ -15,9 +15,9 @@ require (
|
||||
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
|
||||
github.com/google/pprof v0.0.0-20250903194437-c28834ac2320 // indirect
|
||||
github.com/ssgo/config v1.7.10 // indirect
|
||||
github.com/ssgo/log v1.7.9 // indirect
|
||||
github.com/ssgo/log v1.7.10 // indirect
|
||||
github.com/ssgo/standard v1.7.7 // indirect
|
||||
github.com/ssgo/tool v0.4.29 // indirect
|
||||
golang.org/x/sys v0.38.0 // indirect
|
||||
golang.org/x/text v0.31.0 // indirect
|
||||
golang.org/x/sys v0.39.0 // indirect
|
||||
golang.org/x/text v0.32.0 // indirect
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user