mirror of
https://github.com/MontFerret/ferret.git
synced 2025-07-17 01:32:22 +02:00
* Fixed logger level * Fixed WAITFOR EVENT parser * Added tracing to Network Manager * Updated logging * Swtitched to value type of logger * Added tracing * Increased websocket maximum buffer size * Ignore unimportant error message * Added support of new CDP API for layouts * Switched to value type of logger * Added log level * Fixed early context cancellation * Updated example of 'click' action * Switched to val for elements lookup * Fixed unit tests * Refactored 'eval' module * Fixed SetStyle eval expression * Fixed style deletion * Updated logic of setting multiple styles
75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
package eval
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/mafredri/cdp/protocol/runtime"
|
|
|
|
"github.com/MontFerret/ferret/pkg/drivers"
|
|
"github.com/MontFerret/ferret/pkg/runtime/core"
|
|
"github.com/MontFerret/ferret/pkg/runtime/values"
|
|
)
|
|
|
|
func CastToValue(input interface{}) (core.Value, error) {
|
|
value, ok := input.(core.Value)
|
|
|
|
if !ok {
|
|
return values.None, core.Error(core.ErrInvalidType, "eval return type")
|
|
}
|
|
|
|
return value, nil
|
|
}
|
|
|
|
func CastToReference(input interface{}) (runtime.RemoteObject, error) {
|
|
value, ok := input.(runtime.RemoteObject)
|
|
|
|
if !ok {
|
|
return runtime.RemoteObject{}, core.Error(core.ErrInvalidType, "eval return type")
|
|
}
|
|
|
|
return value, nil
|
|
}
|
|
|
|
func wrapExp(exp string) string {
|
|
return "function () {" + exp + "}"
|
|
}
|
|
|
|
func Unmarshal(obj *runtime.RemoteObject) (core.Value, error) {
|
|
if obj == nil {
|
|
return values.None, nil
|
|
}
|
|
|
|
switch obj.Type {
|
|
case "string":
|
|
str, err := strconv.Unquote(string(obj.Value))
|
|
|
|
if err != nil {
|
|
return values.None, err
|
|
}
|
|
|
|
return values.NewString(str), nil
|
|
case "undefined", "null":
|
|
return values.None, nil
|
|
default:
|
|
return values.Unmarshal(obj.Value)
|
|
}
|
|
}
|
|
|
|
func parseRuntimeException(details *runtime.ExceptionDetails) error {
|
|
if details == nil || details.Exception == nil {
|
|
return nil
|
|
}
|
|
|
|
desc := *details.Exception.Description
|
|
|
|
if strings.Contains(desc, drivers.ErrNotFound.Error()) {
|
|
return drivers.ErrNotFound
|
|
}
|
|
|
|
return core.Error(
|
|
core.ErrUnexpected,
|
|
desc,
|
|
)
|
|
}
|