package log import ( _ "embed" "reflect" "apigo.cc/gojs" "apigo.cc/gojs/goja" "github.com/ssgo/u" ) //go:embed log.ts var logTS string //go:embed README.md var logMD string func init() { obj := map[string]any{ "info": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value { args := gojs.MakeArgs(&argsIn, vm).Check(1) args.Logger.Info(getExceptionString(argsIn, vm), args.Map2Array(1)...) return nil }, "warn": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value { args := gojs.MakeArgs(&argsIn, vm).Check(1) args.Logger.Warning(getExceptionString(argsIn, vm), args.Map2Array(1)...) return nil }, "error": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value { args := gojs.MakeArgs(&argsIn, vm).Check(1) args.Logger.Error(getExceptionString(argsIn, vm), args.Map2Array(1)...) return nil }, "debug": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value { args := gojs.MakeArgs(&argsIn, vm).Check(1) args.Logger.Debug(getExceptionString(argsIn, vm), args.Map2Array(1)...) return nil }, "getExceptionString": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value { return vm.ToValue(getExceptionString(argsIn, vm)) }, } gojs.Register("apigo.cc/gojs/log", gojs.Module{ Object: obj, Desc: "logger api by github.com/ssgo/log", TsCode: logTS, Example: logMD, }) } func getExceptionString(args goja.FunctionCall, vm *goja.Runtime) string { if len(args.Arguments) == 0 { return "" } if args.Argument(0).ExportType() != nil && args.Argument(0).ExportType().Kind() == reflect.Map { ex := args.Argument(0).ToObject(vm) message := ex.Get("message") if message != nil { messageStr := u.String(message.Export()) if messageStr != "" { stack := ex.Get("stack") if stack != nil { messageStr += "\n" + u.String(stack.Export()) } return messageStr } } } return u.String(args.Argument(0)) }