helpers
parent
6029286b43
commit
8300aefbed
28
bridge.go
28
bridge.go
|
@ -2,7 +2,9 @@ package wasm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/rand"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
|
@ -129,6 +131,12 @@ func (b *Bridge) addValues() {
|
||||||
}),
|
}),
|
||||||
}}
|
}}
|
||||||
}},
|
}},
|
||||||
|
"crypto": propObject("crypto", map[string]interface{}{
|
||||||
|
"getRandomValues": Func(func(args []interface{}) (interface{}, error) {
|
||||||
|
arr := args[0].(*array)
|
||||||
|
return rand.Read(arr.data())
|
||||||
|
}),
|
||||||
|
}),
|
||||||
"fs": propObject("fs", map[string]interface{}{
|
"fs": propObject("fs", map[string]interface{}{
|
||||||
"constants": propObject("constants", map[string]interface{}{
|
"constants": propObject("constants", map[string]interface{}{
|
||||||
"O_WRONLY": syscall.O_WRONLY,
|
"O_WRONLY": syscall.O_WRONLY,
|
||||||
|
@ -440,7 +448,7 @@ func (b *Bridge) makeFuncWrapper(id, this interface{}, args *[]interface{}) (int
|
||||||
b.valuesMu.RUnlock()
|
b.valuesMu.RUnlock()
|
||||||
event := propObject("_pendingEvent", map[string]interface{}{
|
event := propObject("_pendingEvent", map[string]interface{}{
|
||||||
"id": id,
|
"id": id,
|
||||||
"this": nil,
|
"this": goObj,
|
||||||
"args": args,
|
"args": args,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -473,3 +481,21 @@ func (b *Bridge) SetFunc(fname string, fn Func) error {
|
||||||
b.values[5].(*object).props[fname] = &fn
|
b.values[5].(*object).props[fname] = &fn
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Bytes(v interface{}) ([]byte, error) {
|
||||||
|
arr, ok := v.(*array)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("got %T instead of bytes", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr.data(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Error(v interface{}) (errVal error, err error) {
|
||||||
|
str, ok := v.(string)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("got %T instead of error", v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors.New(str), nil
|
||||||
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/vedhavyas/go-wasm"
|
"github.com/vedhavyas/go-wasm"
|
||||||
|
@ -48,4 +49,27 @@ func main() {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
log.Printf("Multiplier: %v\n", mul)
|
log.Printf("Multiplier: %v\n", mul)
|
||||||
|
|
||||||
|
res, err := b.CallFunc("getBytes", nil)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes, err := wasm.Bytes(res)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
fmt.Println(bytes)
|
||||||
|
|
||||||
|
res, err = b.CallFunc("getError", nil)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
verr, err := wasm.Error(res)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(verr)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"errors"
|
||||||
"log"
|
"log"
|
||||||
"syscall/js"
|
"syscall/js"
|
||||||
)
|
)
|
||||||
|
@ -17,12 +19,28 @@ func multiplier(this js.Value, args []js.Value) interface{} {
|
||||||
return 10
|
return 10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getBytes(this js.Value, args []js.Value) interface{} {
|
||||||
|
r := make([]byte, 32)
|
||||||
|
_, err := rand.Read(r)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return js.TypedArrayOf(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getError(this js.Value, args []js.Value) interface{} {
|
||||||
|
err := errors.New("test errors")
|
||||||
|
return err.Error()
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
ch := make(chan bool)
|
ch := make(chan bool)
|
||||||
|
|
||||||
// register functions
|
// register functions
|
||||||
js.Global().Set("addition", js.FuncOf(addition))
|
js.Global().Set("addition", js.FuncOf(addition))
|
||||||
js.Global().Set("multiplier", js.FuncOf(multiplier))
|
js.Global().Set("multiplier", js.FuncOf(multiplier))
|
||||||
|
js.Global().Set("getBytes", js.FuncOf(getBytes))
|
||||||
|
js.Global().Set("getError", js.FuncOf(getError))
|
||||||
|
|
||||||
res := js.Global().Get("addProxy").Invoke(1, 2)
|
res := js.Global().Get("addProxy").Invoke(1, 2)
|
||||||
log.Printf("1 + 2 = %d\n", res.Int())
|
log.Printf("1 + 2 = %d\n", res.Int())
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue