mirror of
https://github.com/nlepage/go-wasm-http-server.git
synced 2026-01-12 01:59:14 +00:00
[FEATURE] Use ReadableStream for Response (#15)
* feat: uses ReadableStream for Response * chore: rebuilds other examples
This commit is contained in:
11
internal/safejs/bytes.go
Normal file
11
internal/safejs/bytes.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package safejs
|
||||
|
||||
import "github.com/hack-pad/safejs"
|
||||
|
||||
func CopyBytesToGo(dst []byte, src Value) (int, error) {
|
||||
return safejs.CopyBytesToGo(dst, safejs.Value(src))
|
||||
}
|
||||
|
||||
func CopyBytesToJS(dst Value, src []byte) (int, error) {
|
||||
return safejs.CopyBytesToJS(safejs.Value(dst), src)
|
||||
}
|
||||
26
internal/safejs/func.go
Normal file
26
internal/safejs/func.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package safejs
|
||||
|
||||
import (
|
||||
"github.com/hack-pad/safejs"
|
||||
)
|
||||
|
||||
type Func safejs.Func
|
||||
|
||||
func FuncOf(fn func(this Value, args []Value) any) (Func, error) {
|
||||
r, err := safejs.FuncOf(func(this safejs.Value, args []safejs.Value) any {
|
||||
args2 := make([]Value, len(args))
|
||||
for i, v := range args {
|
||||
args2[i] = Value(v)
|
||||
}
|
||||
return fn(Value(this), []Value(args2))
|
||||
})
|
||||
return Func(r), err
|
||||
}
|
||||
|
||||
func (f Func) Release() {
|
||||
safejs.Func(f).Release()
|
||||
}
|
||||
|
||||
func (f Func) Value() Value {
|
||||
return Value(safejs.Func(f).Value())
|
||||
}
|
||||
103
internal/safejs/value.go
Normal file
103
internal/safejs/value.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package safejs
|
||||
|
||||
import (
|
||||
"syscall/js"
|
||||
|
||||
"github.com/hack-pad/safejs"
|
||||
)
|
||||
|
||||
type Value safejs.Value
|
||||
|
||||
func Safe(v js.Value) Value {
|
||||
return Value(safejs.Safe(v))
|
||||
}
|
||||
|
||||
func Unsafe(v Value) js.Value {
|
||||
return safejs.Unsafe(safejs.Value(v))
|
||||
}
|
||||
|
||||
func ValueOf(value any) (Value, error) {
|
||||
v, err := safejs.ValueOf(value)
|
||||
return Value(v), err
|
||||
}
|
||||
|
||||
func (v Value) Call(m string, args ...any) (Value, error) {
|
||||
args = toJSValue(args).([]any)
|
||||
r, err := safejs.Value(v).Call(m, args...)
|
||||
return Value(r), err
|
||||
}
|
||||
|
||||
func (v Value) Get(p string) (Value, error) {
|
||||
r, err := safejs.Value(v).Get(p)
|
||||
return Value(r), err
|
||||
}
|
||||
|
||||
func (v Value) GetBool(p string) (bool, error) {
|
||||
bv, err := v.Get(p)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return safejs.Value(bv).Bool()
|
||||
}
|
||||
|
||||
func (v Value) GetInt(p string) (int, error) {
|
||||
iv, err := v.Get(p)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return safejs.Value(iv).Int()
|
||||
}
|
||||
|
||||
func (v Value) GetString(p string) (string, error) {
|
||||
sv, err := v.Get(p)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return safejs.Value(sv).String()
|
||||
}
|
||||
|
||||
func (v Value) Index(i int) (Value, error) {
|
||||
r, err := safejs.Value(v).Index(i)
|
||||
return Value(r), err
|
||||
}
|
||||
|
||||
func (v Value) IndexString(i int) (string, error) {
|
||||
sv, err := v.Index(i)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return safejs.Value(sv).String()
|
||||
}
|
||||
|
||||
func (v Value) New(args ...any) (Value, error) {
|
||||
args = toJSValue(args).([]any)
|
||||
r, err := safejs.Value(v).New(args...)
|
||||
return Value(r), err
|
||||
}
|
||||
|
||||
func toJSValue(jsValue any) any {
|
||||
switch value := jsValue.(type) {
|
||||
case Value:
|
||||
return safejs.Value(value)
|
||||
case Func:
|
||||
return safejs.Func(value)
|
||||
case map[string]any:
|
||||
newValue := make(map[string]any)
|
||||
for mapKey, mapValue := range value {
|
||||
newValue[mapKey] = toJSValue(mapValue)
|
||||
}
|
||||
return newValue
|
||||
case []any:
|
||||
newValue := make([]any, len(value))
|
||||
for i, arg := range value {
|
||||
newValue[i] = toJSValue(arg)
|
||||
}
|
||||
return newValue
|
||||
default:
|
||||
return jsValue
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user