package js import ( "encoding/json" "errors" "github.com/robertkrimen/otto" ) func UnmarshalObject[T ~string | ~[]byte](jsCode T, objName string, i any) error { if len(jsCode) == 0 { return errors.New("empty JS code snippet") } vm := otto.New() v, _ := vm.Run(jsCode) var err error if objName != "" { v, err = vm.Get(objName) if err != nil { return err } } b, err := v.MarshalJSON() if err != nil { return err } return json.Unmarshal(b, i) }