From 6d63360d4cddb78f1c9eff92d16f84ee702c6269 Mon Sep 17 00:00:00 2001 From: Star <> Date: Fri, 8 Mar 2024 11:45:13 +0800 Subject: [PATCH] add logger fix return nil bug --- bridge.go | 6 ++++++ gojs.go | 46 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/bridge.go b/bridge.go index d7380fc..a7f4575 100644 --- a/bridge.go +++ b/bridge.go @@ -48,8 +48,14 @@ func _makeJsValue(ctx *plugin.Context, in interface{}, n int, key string, plugin v = reflect.ValueOf(in) } for v.Kind() == reflect.Ptr || v.Kind() == reflect.Interface { + if v.IsNil() { + return jsCtx.Null() + } v = v.Elem() } + if (v.Kind() == reflect.Slice || v.Kind() == reflect.Map || v.Kind() == reflect.Func) && v.IsNil() { + return jsCtx.Null() + } switch v.Kind() { case reflect.Bool: diff --git a/gojs.go b/gojs.go index eabf3e6..63435e0 100644 --- a/gojs.go +++ b/gojs.go @@ -119,22 +119,60 @@ func New(globals map[string]interface{}, logger *log.Logger) *JSRuntime { // 注入 console rt.JsCtx.Globals().Set("console", MakeJsValue(rt.GoCtx, map[string]interface{}{ "log": func(args ...interface{}) { - fmt.Println(args...) + fmt.Println(makeStringArray(args, u.TextNone, u.BgNone)...) }, "info": func(args ...interface{}) { - fmt.Println(u.Cyan(fmt.Sprintln(args...))) + fmt.Println(makeStringArray(args, u.TextCyan, u.BgNone)...) }, "warn": func(args ...interface{}) { - fmt.Println(u.BYellow(fmt.Sprintln(args...))) + fmt.Println(makeStringArray(args, u.TextBlack, u.BgYellow)...) }, "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)) 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) { rt := New(globals, logger) defer func() {