WebAssembly Client

/app/wasm/funcs.go (1.3 KB)

 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
}