reuse quickjs objects in script.js processor

This commit is contained in:
Joel Wetzell
2026-03-10 18:14:50 -05:00
parent 5a0f21bd64
commit 8132faaba6

View File

@@ -11,43 +11,27 @@ import (
) )
type ScriptJS struct { type ScriptJS struct {
config config.ProcessorConfig config config.ProcessorConfig
Program string vm *quickjs.VM
payloadAtom quickjs.Atom
senderAtom quickjs.Atom
Program string
} }
func (sj *ScriptJS) Process(ctx context.Context, payload any) (any, error) { func (sj *ScriptJS) Process(ctx context.Context, payload any) (any, error) {
vm, err := quickjs.NewVM() sj.vm.SetProperty(sj.vm.GlobalObject(), sj.payloadAtom, payload)
if err != nil {
return nil, err
}
defer vm.Close()
payloadAtom, err := vm.NewAtom("payload")
if err != nil {
return nil, err
}
vm.SetProperty(vm.GlobalObject(), payloadAtom, payload)
sender := ctx.Value(common.SenderContextKey) sender := ctx.Value(common.SenderContextKey)
if sender != nil { sj.vm.SetProperty(sj.vm.GlobalObject(), sj.senderAtom, sender)
senderAtom, err := vm.NewAtom("sender")
if err != nil { _, err := sj.vm.Eval(sj.Program, quickjs.EvalGlobal)
return nil, err
}
vm.SetProperty(vm.GlobalObject(), senderAtom, sender)
}
_, err = vm.Eval(sj.Program, quickjs.EvalGlobal)
if err != nil { if err != nil {
return nil, err return nil, err
} }
output, err := vm.GetProperty(vm.GlobalObject(), payloadAtom) output, err := sj.vm.GetProperty(sj.vm.GlobalObject(), sj.payloadAtom)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -87,7 +71,23 @@ func init() {
return nil, fmt.Errorf("script.js program error: %w", err) return nil, fmt.Errorf("script.js program error: %w", err)
} }
return &ScriptJS{config: config, Program: programString}, nil vm, err := quickjs.NewVM()
if err != nil {
return nil, err
}
payloadAtom, err := vm.NewAtom("payload")
if err != nil {
return nil, err
}
senderAtom, err := vm.NewAtom("sender")
if err != nil {
return nil, err
}
return &ScriptJS{config: config, Program: programString, vm: vm, payloadAtom: payloadAtom, senderAtom: senderAtom}, nil
}, },
}) })
} }