Skip to content
Snippets Groups Projects
Select Git revision
  • e56c5f0175703486bcaa689d6eadb4a6f1310394
  • release default
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • master protected
  • XX-4688/DbEncoding
  • hotfix/update
  • @XX-4682/Files
  • hotfix/XX-4655
  • dev protected
  • project/HavenNotifications
  • XX-4602/SilentMessageType
  • jono/npmTest
  • wasmTest2
  • XX-4461/FileUpload
  • XX-4505/blockuser
  • XX-4441
  • Jakub/Emoji-CI-Test
  • testing/websockets
  • fastReg
  • fast-registration
  • NewHostPool
  • v0.3.22
  • v0.3.21
  • v0.3.20
  • v0.3.18
  • v0.3.17
  • v0.3.16
  • v0.3.15
  • v0.3.14
  • v0.3.13
  • v0.3.12
  • v0.3.11
  • v0.3.10
  • v0.3.9
  • v0.3.8
  • v0.3.7
  • v0.3.6
  • v0.3.5
  • v0.3.4
  • 812b395df518ce096d01d5292596ca26f8fe92d9c4487ddfa515e190a51aa1a1
  • 76ba08e2dfa1798412a265404fa271840b52c035869111fce8e8cdb23a036a5a
41 results

console.go

Blame
  • Jono Wenger's avatar
    Jono Wenger authored
    0007881b
    History
    console.go 2.77 KiB
    ////////////////////////////////////////////////////////////////////////////////
    // Copyright © 2022 xx foundation                                             //
    //                                                                            //
    // Use of this source code is governed by a license that can be found in the  //
    // LICENSE file.                                                              //
    ////////////////////////////////////////////////////////////////////////////////
    
    //go:build js && wasm
    
    package logging
    
    import (
    	jww "github.com/spf13/jwalterweatherman"
    	"io"
    	"syscall/js"
    )
    
    var consoleObj = js.Global().Get("console")
    
    // Console contains the Javascript console object, which provides access to the
    // browser's debugging console. This structure is defined for only a single
    // method on the console object. For example, if the method is set to debug,
    // then all calls to console.Write will print a debug message to the Javascript
    // console.
    //
    // Doc: https://developer.mozilla.org/en-US/docs/Web/API/console
    type Console struct {
    	method string
    	js.Value
    }
    
    // Write writes the data to the Javascript console with preset method. Returns
    // the number of bytes written.
    func (c *Console) Write(p []byte) (n int, err error) {
    	c.Call(c.method, string(p))
    	return len(p), nil
    }
    
    // JsConsoleLogListener redirects log output to the Javascript console using the
    // correct console method.
    type JsConsoleLogListener struct {
    	jww.Threshold
    	js.Value
    
    	trace    *Console
    	debug    *Console
    	info     *Console
    	error    *Console
    	warn     *Console
    	critical *Console
    	fatal    *Console
    	def      *Console
    }
    
    // NewJsConsoleLogListener initialises a new log listener that listener for the
    // specific threshold and prints the logs to the Javascript console.
    func NewJsConsoleLogListener(threshold jww.Threshold) *JsConsoleLogListener {
    	return &JsConsoleLogListener{
    		Threshold: threshold,
    		Value:     consoleObj,
    		trace:     &Console{"debug", consoleObj},
    		debug:     &Console{"log", consoleObj},
    		info:      &Console{"info", consoleObj},
    		warn:      &Console{"warn", consoleObj},
    		error:     &Console{"error", consoleObj},
    		critical:  &Console{"error", consoleObj},
    		fatal:     &Console{"error", consoleObj},
    		def:       &Console{"log", consoleObj},
    	}
    }
    
    // Listen is called for every logging event. This function adheres to the
    // [jwalterweatherman.LogListener] type.
    func (ll *JsConsoleLogListener) Listen(t jww.Threshold) io.Writer {
    	if t < ll.Threshold {
    		return nil
    	}
    
    	switch t {
    	case jww.LevelTrace:
    		return ll.trace
    	case jww.LevelDebug:
    		return ll.debug
    	case jww.LevelInfo:
    		return ll.info
    	case jww.LevelWarn:
    		return ll.warn
    	case jww.LevelError:
    		return ll.error
    	case jww.LevelCritical:
    		return ll.critical
    	case jww.LevelFatal:
    		return ll.fatal
    	default:
    		return ll.def
    	}
    }