add logger
fix return nil bug
This commit is contained in:
parent
c58bf345c6
commit
6d63360d4c
@ -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
46
gojs.go
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user