// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. //go:build script // +build script package js import ( "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" teaconst "github.com/TeaOSLab/EdgeNode/internal/const" "github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/iwind/TeaGo/maps" "strings" "testing" ) var SharedJSConsoleLogLibrary = NewJSConsoleLogLibrary() func init() { if !teaconst.IsMain { return } SharedLibraryManager.Register(SharedJSConsoleLogLibrary) } type JSConsoleLogLibrary struct { JSBaseLibrary t *testing.T } func NewJSConsoleLogLibrary() *JSConsoleLogLibrary { return &JSConsoleLogLibrary{} } func (this *JSConsoleLogLibrary) JSNamespace() string { return "gojs.console.JSConsoleLogLibrary" } func (this *JSConsoleLogLibrary) JSPrototype() string { return `console.log = function () { $this.Log(arguments) }` } func (this *JSConsoleLogLibrary) JSSetTesting(t *testing.T) { this.t = t } func (this *JSConsoleLogLibrary) Log(arguments *FunctionArguments) (any, error) { arg0, ok := arguments.ArgAt(0) if !ok { return nil, nil } var values = []string{} if arg0.IsArgumentsObject() { var obj = arg0.Object() if obj != nil { valueLength, err := obj.Get("length") if err != nil { return nil, err } var length = valueLength.Uint32() for i := uint32(0); i < length; i++ { arg, err := obj.GetIdx(i) if err != nil { return nil, err } if arg.IsObject() || arg.IsArray() { objectJSON, err := arg.MarshalJSON() if err != nil { return nil, err } values = append(values, string(objectJSON)) } else { values = append(values, arg.String()) } } } } if this.t != nil { this.t.Log("[JS_CONSOLE_LOG]" + strings.Join(values, " ")) } else { var serverId = arguments.Context().ServerId() if serverId > 0 { remotelogs.ServerLog(serverId, "SCRIPT", "[CONSOLE_LOG]"+strings.Join(values, " "), nodeconfigs.NodeLogTypeScriptConsoleLog, maps.Map{}) } else { remotelogs.Println("SCRIPT", "[CONSOLE_LOG]"+strings.Join(values, " ")) } } return nil, nil }