package promises import ( "encoding/json" "fmt" "syscall/js" ) func ValueOf(val any) (js.Value, error) { switch v := val.(type) { case js.Value: return v, nil case js.Func: return js.ValueOf(v), nil case nil: return js.Null(), nil case bool: return js.ValueOf(v), nil case int: return js.ValueOf(v), nil case int8: return js.ValueOf(v), nil case int16: return js.ValueOf(v), nil case int32: return js.ValueOf(v), nil case int64: return js.ValueOf(v), nil case uint: return js.ValueOf(v), nil case uint8: return js.ValueOf(v), nil case uint16: return js.ValueOf(v), nil case uint32: return js.ValueOf(v), nil case uint64: return js.ValueOf(v), nil case float32: return js.ValueOf(v), nil case float64: return js.ValueOf(v), nil case string: return js.ValueOf(v), nil case []any: return js.ValueOf(v), nil case map[string]any: return js.ValueOf(v), nil case []byte: return js.ValueOf(string(v)), nil default: by, marshalErr := json.Marshal(val) if marshalErr == nil { m := make(map[string]any) unmarshallErr := json.Unmarshal(by, &m) if unmarshallErr == nil { return js.ValueOf(m), nil } s := []any{} unmarshallErr = json.Unmarshal(by, &s) if unmarshallErr == nil { return js.ValueOf(s), nil } } } return js.Value{}, fmt.Errorf("unable to create a JS value for %T", val) }