package module import ( "context" "forge.cadoles.com/arcad/edge/pkg/app" "github.com/dop251/goja" "github.com/pkg/errors" "gitlab.com/wpetit/goweb/logger" ) type LifecycleModule struct{} func (m *LifecycleModule) Name() string { return "lifecycle" } func (m *LifecycleModule) Export(export *goja.Object) { } func (m *LifecycleModule) OnInit(rt *goja.Runtime) (err error) { call, ok := goja.AssertFunction(rt.Get("onInit")) if !ok { logger.Warn(context.Background(), "could not find onInit() function") return nil } defer func() { if recovered := recover(); recovered != nil { revoveredErr, ok := recovered.(error) if ok { logger.Error(context.Background(), "recovered runtime error", logger.E(errors.WithStack(revoveredErr))) err = errors.WithStack(app.ErUnknownError) return } panic(recovered) } }() call(nil) return nil } func LifecycleModuleFactory() app.ServerModuleFactory { return func(server *app.Server) app.ServerModule { module := &LifecycleModule{} return module } } var _ app.InitializableModule = &LifecycleModule{}