add logger

fix return nil bug
This commit is contained in:
Star 2024-03-08 11:45:13 +08:00
parent c58bf345c6
commit 6d63360d4c
2 changed files with 48 additions and 4 deletions

View File

@ -48,8 +48,14 @@ func _makeJsValue(ctx *plugin.Context, in interface{}, n int, key string, plugin
v = reflect.ValueOf(in) v = reflect.ValueOf(in)
} }
for v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface { for v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface {
if v.IsNil() {
return jsCtx.Null()
}
v = v.Elem() v = v.Elem()
} }
if (v.Kind() == reflect.Slice || v.Kind() == reflect.Map || v.Kind() == reflect.Func) && v.IsNil() {
return jsCtx.Null()
}
switch v.Kind() { switch v.Kind() {
case reflect.Bool: case reflect.Bool:

46
gojs.go
View File

@ -119,22 +119,60 @@ func New(globals map[string]interface{}, logger *log.Logger) *JSRuntime {
// 注入 console // 注入 console
rt.JsCtx.Globals().Set("console", MakeJsValue(rt.GoCtx, map[string]interface{}{ rt.JsCtx.Globals().Set("console", MakeJsValue(rt.GoCtx, map[string]interface{}{
"log": func(args ...interface{}) { "log": func(args ...interface{}) {
fmt.Println(args...) fmt.Println(makeStringArray(args, u.TextNone, u.BgNone)...)
}, },
"info": func(args ...interface{}) { "info": func(args ...interface{}) {
fmt.Println(u.Cyan(fmt.Sprintln(args...))) fmt.Println(makeStringArray(args, u.TextCyan, u.BgNone)...)
}, },
"warn": func(args ...interface{}) { "warn": func(args ...interface{}) {
fmt.Println(u.BYellow(fmt.Sprintln(args...))) fmt.Println(makeStringArray(args, u.TextBlack, u.BgYellow)...)
}, },
"error": func(args ...interface{}) { "error": func(args ...interface{}) {
fmt.Println(u.BRed(fmt.Sprintln(args...))) fmt.Println(makeStringArray(args, u.TextWhite, u.BgRed)...)
},
}, false))
// 注入 logger
rt.JsCtx.Globals().Set("logger", MakeJsValue(rt.GoCtx, map[string]interface{}{
"debug": func(message string, args *map[string]interface{}) {
rt.logger.Debug(message, makeMapToArray(args)...)
},
"info": func(message string, args *map[string]interface{}) {
rt.logger.Info(message, makeMapToArray(args)...)
},
"warn": func(message string, args *map[string]interface{}) {
rt.logger.Warning(message, makeMapToArray(args)...)
},
"error": func(message string, args *map[string]interface{}) {
rt.logger.Error(message, makeMapToArray(args)...)
}, },
}, false)) }, false))
return rt return rt
} }
func makeMapToArray(args *map[string]interface{}) []interface{} {
outArgs := make([]interface{}, 0)
if args != nil {
for k, v := range *args {
outArgs = append(outArgs, k, v)
}
}
return outArgs
}
func makeStringArray(args []interface{}, color u.TextColor, bg u.BgColor) []interface{} {
stringArgs := make([]interface{}, len(args))
for i, v := range args {
if color != u.TextNone || bg != u.BgNone {
stringArgs[i] = u.Color(u.StringP(v), color, bg)
} else {
stringArgs[i] = u.StringP(v)
}
}
return stringArgs
}
func Run(code string, globals map[string]interface{}, logger *log.Logger) (out interface{}, err error, stack string) { func Run(code string, globals map[string]interface{}, logger *log.Logger) (out interface{}, err error, stack string) {
rt := New(globals, logger) rt := New(globals, logger)
defer func() { defer func() {