1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| // $PF_GENERATE_ONCE$ //go:build js package main
import ( "fmt" "syscall/js" )
func wireFunctions() { js.Global().Set("increment", js.FuncOf(increment)) js.Global().Set("log", js.FuncOf(log)) js.Global().Set("send", js.FuncOf(send)) }
func increment(this js.Value, args []js.Value) any { if len(args) == 0 { return "exactly one argument is required" } arg := args[0].Int() return arg + 1 }
func send(this js.Value, args []js.Value) any { if len(args) == 0 { return "at least one argument is required" } arg := args[0].String() return arg }
func log(this js.Value, args []js.Value) any { if _rootLogger == nil { println("ERROR: no logger available") return nil } if len(args) == 0 { _rootLogger.Warnf("at least one argument is required") return nil } msg := args[0].String() cleanArgs := make([]any, 0, len(args)-1) for _, x := range args[1:] { switch x.Type() { case js.TypeString: cleanArgs = append(cleanArgs, x.String()) case js.TypeBoolean: cleanArgs = append(cleanArgs, x.Bool()) case js.TypeNumber: cleanArgs = append(cleanArgs, x.Float()) case js.TypeNull: cleanArgs = append(cleanArgs, "<null>") default: cleanArgs = append(cleanArgs, fmt.Sprintf("unhandled type [%T]", x)) } } _rootLogger.Infof(msg, cleanArgs...) return nil }
|