func (t *timerTask) Execute(vm *otto.Otto, l *loop.Loop) error { var arguments []interface{} if len(t.call.ArgumentList) > 2 { tmp := t.call.ArgumentList[2:] arguments = make([]interface{}, 2+len(tmp)) for i, value := range tmp { arguments[i+2] = value } } else { arguments = make([]interface{}, 1) } arguments[0] = t.call.ArgumentList[0] if _, err := vm.Call(`Function.call.call`, nil, arguments...); err != nil { return err } if t.interval && !t.stopped { t.timer.Reset(t.duration) l.Add(t) } return nil }
func (t *fetchTask) Execute(vm *otto.Otto, l *loop.Loop) error { var arguments []interface{} if t.err != nil { e, err := vm.Call(`new Error`, nil, t.err.Error()) if err != nil { return err } arguments = append(arguments, e) } t.jsRes.Set("status", t.status) t.jsRes.Set("statusText", t.statusText) h := mustValue(t.jsRes.Get("headers")).Object() for k, vs := range t.headers { for _, v := range vs { if _, err := h.Call("append", k, v); err != nil { return err } } } t.jsRes.Set("_body", string(t.body)) if _, err := t.cb.Call(otto.NullValue(), arguments...); err != nil { return err } return nil }
func makeFilterWithVM(vm *otto.Otto, script string) (func(input string) (string, error), error) { var ( res *http.Response body []byte err error ) res, err = http.Get(REQUIREJS_URL) if err != nil { log.Fatal(err) } body, err = ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) } res.Body.Close() rjs := string(body[:]) return func(input string) (string, error) { logrus.Debug("Adding RequireJS") vm.Run(rjs) logrus.Debug("Executing script: " + script) _, err := vm.Run(` var module = { "exports": function() { } } `) if err != nil { return "", err } _, err = vm.Run(script) if err != nil { return "", err } event := make(chan otto.Value) oval, err := vm.ToValue(input) if err != nil { return "", err } jscontext := createContext(vm, event) go vm.Call("module.exports", nil, oval, jscontext) value := <-event return value.ToString() }, nil }
func (t *fetchTask) Execute(vm *otto.Otto, l *loop.Loop) error { var arguments []interface{} if t.err != nil { e, err := vm.Call(`new Error`, nil, t.err.Error()) if err != nil { return err } arguments = append(arguments, e) } if _, err := t.cb.Call(otto.NullValue(), arguments...); err != nil { return err } return nil }