From 63df367bad225213da9c03bf51871f72e25e7b5a Mon Sep 17 00:00:00 2001 From: yflau <5521134@qq.com> Date: Tue, 7 May 2024 16:52:43 +0800 Subject: [PATCH] support custom loaders it's useful for custom widgets or processes loaders to use the initialized config.Config in engine.Load --- engine/load.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/engine/load.go b/engine/load.go index 32e1754a..1461f757 100644 --- a/engine/load.go +++ b/engine/load.go @@ -39,6 +39,18 @@ import ( "github.com/yaoapp/yao/widgets" ) +// LoadHooks used to load custom widgets/processes +var LoadHooks = map[string]func(config.Config) error{} + +// RegisterLoadHook register custom load hook +func RegisterLoadHook(name string, hook func(config.Config) error) error { + if _, ok := LoadHooks[name]; ok { + return fmt.Errorf("load hook %s already exists", name) + } + LoadHooks[name] = hook + return nil +} + // LoadOption the load option type LoadOption struct { Action string `json:"action"` @@ -225,6 +237,13 @@ func Load(cfg config.Config, options LoadOption) (err error) { printErr(cfg.Mode, "Pipe", err) } + for name, hook := range LoadHooks { + err = hook(cfg) + if err != nil { + printErr(cfg.Mode, name, err) + } + } + // Execute AfterLoad Process if exists if share.App.AfterLoad != "" && !options.IgnoredAfterLoad { p, err := process.Of(share.App.AfterLoad, options)