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