fix: Enhance loading functions to handle non-existent directories

- Added checks in various loading functions to ignore processing if the respective directories do not exist, improving error handling and preventing unnecessary operations.
- Updated the Load function signature to return warnings alongside errors, allowing for better feedback on loading issues across different components.
This commit is contained in:
Max 2025-05-13 09:10:10 +08:00
parent 15f3f0adf8
commit fabced291c
31 changed files with 357 additions and 69 deletions

View file

@ -11,9 +11,19 @@ import (
// Load load AIGC // Load load AIGC
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the aigcs directory does not exist
exists, err := application.App.Exists("aigcs")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.ai.yml", "*.ai.yaml"} exts := []string{"*.ai.yml", "*.ai.yaml"}
messages := []string{} messages := []string{}
err := application.App.Walk("aigcs", func(root, file string, isdir bool) error { err = application.App.Walk("aigcs", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -14,8 +14,17 @@ import (
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
messages := []string{} messages := []string{}
// Ignore if the apis directory does not exist
exists, err := application.App.Exists("apis")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.http.yao", "*.http.json", "*.http.jsonc"} exts := []string{"*.http.yao", "*.http.json", "*.http.jsonc"}
err := application.App.Walk("apis", func(root, file string, isdir bool) error { err = application.App.Walk("apis", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -11,6 +11,17 @@ import (
// Load 加载API // Load 加载API
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the certs directory does not exist
exists, err := application.App.Exists("certs")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.pem", "*.key", "*.pub"} exts := []string{"*.pem", "*.key", "*.pub"}
return application.App.Walk("certs", func(root, file string, isdir bool) error { return application.App.Walk("certs", func(root, file string, isdir bool) error {
if isdir { if isdir {

View file

@ -57,12 +57,18 @@ var dumpCmd = &cobra.Command{
} }
// Load model // Load model
err = engine.Load(config.Conf, engine.LoadOption{Action: "dump"}) loadWarnings, err := engine.Load(config.Conf, engine.LoadOption{Action: "dump"})
if err != nil { if err != nil {
fmt.Println(color.RedString(L("Fatal: %s"), err.Error())) fmt.Println(color.RedString(L("Fatal: %s"), err.Error()))
os.Exit(1) os.Exit(1)
} }
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
}
if dumpModel != "" { if dumpModel != "" {
fmt.Println(color.YellowString(L("Not supported yet"))) fmt.Println(color.YellowString(L("Not supported yet")))
os.Exit(1) os.Exit(1)

View file

@ -37,12 +37,18 @@ var migrateCmd = &cobra.Command{
} }
// 加载数据模型 // 加载数据模型
err := engine.Load(config.Conf, engine.LoadOption{Action: "migrate"}) loadWarnings, err := engine.Load(config.Conf, engine.LoadOption{Action: "migrate"})
if err != nil { if err != nil {
fmt.Println(color.RedString(L("Fatal: %s"), err.Error())) fmt.Println(color.RedString(L("Fatal: %s"), err.Error()))
os.Exit(1) os.Exit(1)
} }
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
}
if name != "" { if name != "" {
mod, has := model.Models[name] mod, has := model.Models[name]
if !has { if !has {

View file

@ -60,12 +60,18 @@ var restoreCmd = &cobra.Command{
}) })
// 加载数据模型 // 加载数据模型
err = engine.Load(config.Conf, engine.LoadOption{Action: "restore"}) loadWarnings, err := engine.Load(config.Conf, engine.LoadOption{Action: "restore"})
if err != nil { if err != nil {
fmt.Println(color.RedString(L("Fatal: %s"), err.Error())) fmt.Println(color.RedString(L("Fatal: %s"), err.Error()))
os.Exit(1) os.Exit(1)
} }
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
}
// Restore models // Restore models
restoreModels(filepath.Join(dst, "model"), []model.MigrateOption{ restoreModels(filepath.Join(dst, "model"), []model.MigrateOption{
model.WithDonotInsertValues(migrateNoInsert), model.WithDonotInsertValues(migrateNoInsert),

View file

@ -57,7 +57,7 @@ var runCmd = &cobra.Command{
return return
} }
err := engine.Load(cfg, engine.LoadOption{Action: "run"}) loadWarnings, err := engine.Load(cfg, engine.LoadOption{Action: "run"})
if err != nil { if err != nil {
if !runSilent { if !runSilent {
color.Red(L("Engine: %s\n"), err.Error()) color.Red(L("Engine: %s\n"), err.Error())
@ -130,6 +130,17 @@ var runCmd = &cobra.Command{
} }
if !runSilent { if !runSilent {
if len(loadWarnings) > 0 {
fmt.Println(color.YellowString("---------------------------------"))
fmt.Println(color.YellowString(L("Warnings")))
fmt.Println(color.YellowString("---------------------------------"))
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
fmt.Printf("\n")
}
color.White("--------------------------------------\n") color.White("--------------------------------------\n")
color.White(L("%s Response\n"), name) color.White(L("%s Response\n"), name)
color.White("--------------------------------------\n") color.White("--------------------------------------\n")

View file

@ -77,7 +77,7 @@ var startCmd = &cobra.Command{
} }
// load the application engine // load the application engine
err := engine.Load(config.Conf, engine.LoadOption{Action: "start"}) loadWarnings, err := engine.Load(config.Conf, engine.LoadOption{Action: "start"})
if err != nil { if err != nil {
fmt.Println(color.RedString(L("Load: %s"), err.Error())) fmt.Println(color.RedString(L("Load: %s"), err.Error()))
os.Exit(1) os.Exit(1)
@ -232,6 +232,17 @@ var startCmd = &cobra.Command{
printStores(true) printStores(true)
} }
// Print the warnings
if len(loadWarnings) > 0 {
fmt.Println(color.YellowString("---------------------------------"))
fmt.Println(color.YellowString(L("Warnings")))
fmt.Println(color.YellowString("---------------------------------"))
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
fmt.Printf("\n")
}
for { for {
select { select {
case v := <-srv.Event(): case v := <-srv.Event():
@ -275,11 +286,19 @@ func install() error {
Boot() Boot()
// load the application engine // load the application engine
err = engine.Load(config.Conf, engine.LoadOption{Action: "start"}) loadWarnings, err := engine.Load(config.Conf, engine.LoadOption{Action: "start"})
if err != nil { if err != nil {
return err return err
} }
// Print the warnings
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
fmt.Printf("\n\n")
}
err = setup.Initialize(config.Conf.Root, config.Conf) err = setup.Initialize(config.Conf.Root, config.Conf)
if err != nil { if err != nil {
return err return err

View file

@ -18,6 +18,11 @@ import (
"github.com/yaoapp/yao/studio" "github.com/yaoapp/yao/studio"
) )
// *********************************************************************************
// !! Yao Studio Command has been deprecated.
// !! Do not use this command in your project.
// *********************************************************************************
// RunCmd command // RunCmd command
var RunCmd = &cobra.Command{ var RunCmd = &cobra.Command{
Use: "run", Use: "run",
@ -43,7 +48,7 @@ var RunCmd = &cobra.Command{
return return
} }
err := engine.Load(cfg, engine.LoadOption{Action: "studio.run"}) _, err := engine.Load(cfg, engine.LoadOption{Action: "studio.run"})
if err != nil { if err != nil {
fmt.Println(color.RedString(L("Engine: %s"), err.Error())) fmt.Println(color.RedString(L("Engine: %s"), err.Error()))
} }

View file

@ -31,7 +31,7 @@ var BuildCmd = &cobra.Command{
Boot() Boot()
cfg := config.Conf cfg := config.Conf
err := engine.Load(cfg, engine.LoadOption{Action: "sui.build"}) loadWarnings, err := engine.Load(cfg, engine.LoadOption{Action: "sui.build"})
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, color.RedString(err.Error())) fmt.Fprintln(os.Stderr, color.RedString(err.Error()))
return return
@ -99,6 +99,13 @@ var BuildCmd = &cobra.Command{
fmt.Println(color.YellowString("Build succeeded for %s in %s", mode, timecost)) fmt.Println(color.YellowString("Build succeeded for %s in %s", mode, timecost))
return return
} }
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
}
if len(warnings) > 0 { if len(warnings) > 0 {
for _, warning := range warnings { for _, warning := range warnings {
fmt.Println(color.YellowString("Warning: %s", warning)) fmt.Println(color.YellowString("Warning: %s", warning))

View file

@ -32,7 +32,7 @@ var TransCmd = &cobra.Command{
Boot() Boot()
cfg := config.Conf cfg := config.Conf
err := engine.Load(cfg, engine.LoadOption{Action: "sui.trans"}) loadWarnings, err := engine.Load(cfg, engine.LoadOption{Action: "sui.trans"})
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, color.RedString(err.Error())) fmt.Fprintln(os.Stderr, color.RedString(err.Error()))
return return
@ -135,6 +135,13 @@ var TransCmd = &cobra.Command{
fmt.Println(color.YellowString("Translate succeeded for %s in %s", mode, timecost)) fmt.Println(color.YellowString("Translate succeeded for %s in %s", mode, timecost))
return return
} }
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
}
if len(warnings) > 0 { if len(warnings) > 0 {
for _, warning := range warnings { for _, warning := range warnings {
fmt.Println(color.YellowString("Warning: %s", warning)) fmt.Println(color.YellowString("Warning: %s", warning))

View file

@ -39,12 +39,18 @@ var WatchCmd = &cobra.Command{
Boot() Boot()
cfg := config.Conf cfg := config.Conf
err := engine.Load(cfg, engine.LoadOption{Action: "sui.watch"}) loadWarnings, err := engine.Load(cfg, engine.LoadOption{Action: "sui.watch"})
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, color.RedString(err.Error())) fmt.Fprintln(os.Stderr, color.RedString(err.Error()))
return return
} }
if len(loadWarnings) > 0 {
for _, warning := range loadWarnings {
fmt.Println(color.YellowString("[%s] %s", warning.Widget, warning.Error))
}
}
id := args[0] id := args[0]
template := args[1] template := args[1]

View file

@ -19,7 +19,6 @@ import (
"github.com/yaoapp/yao/flow" "github.com/yaoapp/yao/flow"
"github.com/yaoapp/yao/fs" "github.com/yaoapp/yao/fs"
"github.com/yaoapp/yao/i18n" "github.com/yaoapp/yao/i18n"
"github.com/yaoapp/yao/importer"
"github.com/yaoapp/yao/moapi" "github.com/yaoapp/yao/moapi"
"github.com/yaoapp/yao/model" "github.com/yaoapp/yao/model"
"github.com/yaoapp/yao/neo" "github.com/yaoapp/yao/neo"
@ -60,8 +59,14 @@ type LoadOption struct {
IsReload bool `json:"reload"` IsReload bool `json:"reload"`
} }
// Warning the warning
type Warning struct {
Widget string
Error error
}
// Load application engine // Load application engine
func Load(cfg config.Config, options LoadOption) (err error) { func Load(cfg config.Config, options LoadOption) (warnings []Warning, err error) {
defer func() { err = exception.Catch(recover()) }() defer func() { err = exception.Catch(recover()) }()
exception.Mode = cfg.Mode exception.Mode = cfg.Mode
@ -79,78 +84,91 @@ func Load(cfg config.Config, options LoadOption) (err error) {
err = loadApp(cfg.AppSource) err = loadApp(cfg.AppSource)
if err != nil { if err != nil {
printErr(cfg.Mode, "Load Application", err) printErr(cfg.Mode, "Load Application", err)
warnings = append(warnings, Warning{Widget: "Load Application", Error: err})
} }
// Make Database connections // Make Database connections
err = share.DBConnect(cfg.DB) err = share.DBConnect(cfg.DB)
if err != nil { if err != nil {
printErr(cfg.Mode, "DB", err) // printErr(cfg.Mode, "DB", err)
warnings = append(warnings, Warning{Widget: "DB", Error: err})
} }
// Load Certs // Load Certs
err = cert.Load(cfg) err = cert.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Cert", err) // printErr(cfg.Mode, "Cert", err)
warnings = append(warnings, Warning{Widget: "Cert", Error: err})
} }
// Load Connectors // Load Connectors
err = connector.Load(cfg) err = connector.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Connector", err) // printErr(cfg.Mode, "Connector", err)
warnings = append(warnings, Warning{Widget: "Connector", Error: err})
} }
// Load FileSystem // Load FileSystem
err = fs.Load(cfg) err = fs.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "FileSystem", err) // printErr(cfg.Mode, "FileSystem", err)
warnings = append(warnings, Warning{Widget: "FileSystem", Error: err})
} }
// Load i18n // Load i18n
err = i18n.Load(cfg) err = i18n.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "i18n", err) // printErr(cfg.Mode, "i18n", err)
warnings = append(warnings, Warning{Widget: "i18n", Error: err})
} }
// start v8 runtime // start v8 runtime
err = runtime.Start(cfg) err = runtime.Start(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Runtime", err) // printErr(cfg.Mode, "Runtime", err)
warnings = append(warnings, Warning{Widget: "Runtime", Error: err})
} }
// Load Query Engine // Load Query Engine
err = query.Load(cfg) err = query.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Query Engine", err) // printErr(cfg.Mode, "Query Engine", err)
warnings = append(warnings, Warning{Widget: "Query Engine", Error: err})
} }
// Load Scripts // Load Scripts
err = script.Load(cfg) err = script.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Script", err) // printErr(cfg.Mode, "Script", err)
warnings = append(warnings, Warning{Widget: "Script", Error: err})
} }
// Load Models // Load Models
err = model.Load(cfg) err = model.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Model", err) // printErr(cfg.Mode, "Model", err)
warnings = append(warnings, Warning{Widget: "Model", Error: err})
} }
// Load Data flows // Load Data flows
err = flow.Load(cfg) err = flow.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Flow", err) // printErr(cfg.Mode, "Flow", err)
warnings = append(warnings, Warning{Widget: "Flow", Error: err})
} }
// Load Stores // Load Stores
err = store.Load(cfg) err = store.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Store", err) // printErr(cfg.Mode, "Store", err)
warnings = append(warnings, Warning{Widget: "Store", Error: err})
} }
// Load Plugins // Load Plugins
err = plugin.Load(cfg) err = plugin.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Plugin", err) // printErr(cfg.Mode, "Plugin", err)
warnings = append(warnings, Warning{Widget: "Plugin", Error: err})
} }
// Load WASM Application (experimental) // Load WASM Application (experimental)
@ -158,91 +176,106 @@ func Load(cfg config.Config, options LoadOption) (err error) {
// Load build-in widgets (table / form / chart / ...) // Load build-in widgets (table / form / chart / ...)
err = widgets.Load(cfg) err = widgets.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Widgets", err) // printErr(cfg.Mode, "Widgets", err)
warnings = append(warnings, Warning{Widget: "Widgets", Error: err})
} }
// Load Importers // Load Importers
err = importer.Load(cfg) // err = importer.Load(cfg)
if err != nil { // if err != nil {
printErr(cfg.Mode, "Plugin", err) // // printErr(cfg.Mode, "Plugin", err)
} // warnings = append(warnings, Warning{Widget: "Plugin", Error: err})
// }
// Load Apis // Load Apis
err = api.Load(cfg) // 加载业务接口 API err = api.Load(cfg) // 加载业务接口 API
if err != nil { if err != nil {
printErr(cfg.Mode, "API", err) // printErr(cfg.Mode, "API", err)
warnings = append(warnings, Warning{Widget: "API", Error: err})
} }
// Load Sockets // Load Sockets
err = socket.Load(cfg) // Load sockets err = socket.Load(cfg) // Load sockets
if err != nil { if err != nil {
printErr(cfg.Mode, "Socket", err) // printErr(cfg.Mode, "Socket", err)
warnings = append(warnings, Warning{Widget: "Socket", Error: err})
} }
// Load websockets (client mode) // Load websockets (client mode)
err = websocket.Load(cfg) err = websocket.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "WebSocket", err) // printErr(cfg.Mode, "WebSocket", err)
warnings = append(warnings, Warning{Widget: "WebSocket", Error: err})
} }
// Load tasks // Load tasks
err = task.Load(cfg) err = task.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Task", err) // printErr(cfg.Mode, "Task", err)
warnings = append(warnings, Warning{Widget: "Task", Error: err})
} }
// Load schedules // Load schedules
err = schedule.Load(cfg) err = schedule.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Schedule", err) // printErr(cfg.Mode, "Schedule", err)
warnings = append(warnings, Warning{Widget: "Schedule", Error: err})
} }
// Load AIGC // Load AIGC
err = aigc.Load(cfg) err = aigc.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "AIGC", err) // printErr(cfg.Mode, "AIGC", err)
} warnings = append(warnings, Warning{Widget: "AIGC", Error: err})
// Load Neo
err = neo.Load(cfg)
if err != nil {
printErr(cfg.Mode, "Neo", err)
} }
// Load Custom Widget // Load Custom Widget
err = widget.Load(cfg) err = widget.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Widget", err) // printErr(cfg.Mode, "Widget", err)
warnings = append(warnings, Warning{Widget: "Widget", Error: err})
} }
// Load Custom Widget Instances // Load Custom Widget Instances
err = widget.LoadInstances() err = widget.LoadInstances()
if err != nil { if err != nil {
printErr(cfg.Mode, "Widget", err) // printErr(cfg.Mode, "Widget", err)
warnings = append(warnings, Warning{Widget: "Widget", Error: err})
} }
// Load SUI // Load SUI
err = sui.Load(cfg) err = sui.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "SUI", err) // printErr(cfg.Mode, "SUI", err)
warnings = append(warnings, Warning{Widget: "SUI", Error: err})
} }
// Load Moapi // Load Moapi
err = moapi.Load(cfg) err = moapi.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Moapi", err) // printErr(cfg.Mode, "Moapi", err)
warnings = append(warnings, Warning{Widget: "Moapi", Error: err})
} }
// Load Pipe // Load Pipe
err = pipe.Load(cfg) err = pipe.Load(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, "Pipe", err) // printErr(cfg.Mode, "Pipe", err)
warnings = append(warnings, Warning{Widget: "Pipe", Error: err})
}
// Load Neo
err = neo.Load(cfg)
if err != nil {
// printErr(cfg.Mode, "Neo", err)
warnings = append(warnings, Warning{Widget: "Neo", Error: err})
} }
for name, hook := range LoadHooks { for name, hook := range LoadHooks {
err = hook(cfg) err = hook(cfg)
if err != nil { if err != nil {
printErr(cfg.Mode, name, err) // printErr(cfg.Mode, name, err)
warnings = append(warnings, Warning{Widget: name, Error: err})
} }
} }
@ -251,17 +284,19 @@ func Load(cfg config.Config, options LoadOption) (err error) {
p, err := process.Of(share.App.AfterLoad, options) p, err := process.Of(share.App.AfterLoad, options)
if err != nil { if err != nil {
printErr(cfg.Mode, "AfterLoad", err) printErr(cfg.Mode, "AfterLoad", err)
return err warnings = append(warnings, Warning{Widget: "AfterLoad", Error: err})
return warnings, err
} }
_, err = p.Exec() _, err = p.Exec()
if err != nil { if err != nil {
printErr(cfg.Mode, "AfterLoad", err) printErr(cfg.Mode, "AfterLoad", err)
return err warnings = append(warnings, Warning{Widget: "AfterLoad", Error: err})
return warnings, err
} }
} }
return nil return warnings, nil
} }
// Unload application engine // Unload application engine
@ -458,7 +493,19 @@ func Restart(cfg config.Config, options LoadOption) error {
if err != nil { if err != nil {
return err return err
} }
return Load(cfg, options)
warnings, err := Load(cfg, options)
if err != nil {
return err
}
if len(warnings) > 0 {
for _, warning := range warnings {
printErr(cfg.Mode, warning.Widget, warning.Error)
}
}
return nil
} }
// loadApp load the application from bindata / pkg / disk // loadApp load the application from bindata / pkg / disk

View file

@ -13,14 +13,14 @@ import (
func TestLoad(t *testing.T) { func TestLoad(t *testing.T) {
defer Unload() defer Unload()
err := Load(config.Conf, LoadOption{}) _, err := Load(config.Conf, LoadOption{})
assert.Nil(t, err) assert.Nil(t, err)
assert.Greater(t, len(api.APIs), 0) assert.Greater(t, len(api.APIs), 0)
} }
func TestReload(t *testing.T) { func TestReload(t *testing.T) {
defer Unload() defer Unload()
err := Load(config.Conf, LoadOption{}) _, err := Load(config.Conf, LoadOption{})
assert.Nil(t, err) assert.Nil(t, err)
Reload(config.Conf, LoadOption{}) Reload(config.Conf, LoadOption{})
@ -41,7 +41,7 @@ func TestLoadYaz(t *testing.T) {
cfg := config.Conf cfg := config.Conf
cfg.AppSource = file cfg.AppSource = file
err = Load(cfg, LoadOption{}) _, err = Load(cfg, LoadOption{})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -62,7 +62,7 @@ func TestReoadYaz(t *testing.T) {
cfg := config.Conf cfg := config.Conf
cfg.AppSource = file cfg.AppSource = file
err = Load(cfg, LoadOption{}) _, err = Load(cfg, LoadOption{})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -9,6 +9,16 @@ import (
// Load 加载业务逻辑编排 // Load 加载业务逻辑编排
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the flows directory does not exist
exists, err := application.App.Exists("flows")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.flow.yao", "*.flow.json", "*.flow.jsonc"} exts := []string{"*.flow.yao", "*.flow.json", "*.flow.jsonc"}
return application.App.Walk("flows", func(root, file string, isdir bool) error { return application.App.Walk("flows", func(root, file string, isdir bool) error {
if isdir { if isdir {

View file

@ -7,6 +7,7 @@ import (
"sync" "sync"
"time" "time"
"github.com/yaoapp/gou/application"
"github.com/yaoapp/gou/lang" "github.com/yaoapp/gou/lang"
"github.com/yaoapp/kun/log" "github.com/yaoapp/kun/log"
"github.com/yaoapp/yao/config" "github.com/yaoapp/yao/config"
@ -43,6 +44,15 @@ func Load(cfg config.Config) error {
return err return err
} }
// Ignore if the langs directory does not exist
exists, err := application.App.Exists("langs")
if err != nil {
return err
}
if !exists {
return nil
}
// Load langs // Load langs
err = lang.Load("langs") err = lang.Load("langs")
if err != nil { if err != nil {

View file

@ -20,6 +20,11 @@ import (
"github.com/yaoapp/yao/share" "github.com/yaoapp/yao/share"
) )
// *********************************************************************************
// !! Importer has been deprecated.
// !! Do not use this in your project.
// *********************************************************************************
// Importers 导入器 // Importers 导入器
var Importers = map[string]*Importer{} var Importers = map[string]*Importer{}

View file

@ -15,9 +15,18 @@ var pipes = map[string]*Pipe{}
// Load the pipe // Load the pipe
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the pipes directory does not exist
exists, err := application.App.Exists("pipes")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.pip.yao", "*.pipe.yao"} exts := []string{"*.pip.yao", "*.pipe.yao"}
errs := []error{} errs := []error{}
err := application.App.Walk("pipes", func(root, file string, isdir bool) error { err = application.App.Walk("pipes", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -3,6 +3,7 @@ package plugin
import ( import (
"fmt" "fmt"
"io/fs" "io/fs"
"os"
"path/filepath" "path/filepath"
"strings" "strings"
@ -19,6 +20,11 @@ func Load(cfg config.Config) error {
return err return err
} }
// Ignore if the plugins directory does not exist
if _, err := os.Stat(root); os.IsNotExist(err) {
return nil
}
messages := []string{} messages := []string{}
err = filepath.Walk(root, func(file string, info fs.FileInfo, err error) error { err = filepath.Walk(root, func(file string, info fs.FileInfo, err error) error {
if info == nil || info.IsDir() { if info == nil || info.IsDir() {

View file

@ -13,9 +13,19 @@ import (
// Load load schedule // Load load schedule
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the tasks directory does not exist
exists, err := application.App.Exists("schedules")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.sch.yao", "*.sch.json", "*.sch.jsonc"} exts := []string{"*.sch.yao", "*.sch.json", "*.sch.jsonc"}
err := application.App.Walk("schedules", func(root, file string, isdir bool) error { err = application.App.Walk("schedules", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -16,7 +16,7 @@ func TestStartStop(t *testing.T) {
cfg := config.Conf cfg := config.Conf
cfg.Port = 0 cfg.Port = 0
err := engine.Load(cfg, engine.LoadOption{}) _, err := engine.Load(cfg, engine.LoadOption{})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -9,7 +9,7 @@ import (
) )
func TestWatch(t *testing.T) { func TestWatch(t *testing.T) {
err := engine.Load(config.Conf, engine.LoadOption{}) _, err := engine.Load(config.Conf, engine.LoadOption{})
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View file

@ -12,9 +12,19 @@ import (
// Load load store // Load load store
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the stores directory does not exist
exists, err := application.App.Exists("stores")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.yao", "*.json", "*.jsonc"} exts := []string{"*.yao", "*.json", "*.jsonc"}
err := application.App.Walk("stores", func(root, file string, isdir bool) error { err = application.App.Walk("stores", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -13,9 +13,19 @@ import (
// Load load task // Load load task
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the tasks directory does not exist
exists, err := application.App.Exists("tasks")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.yao", "*.json", "*.jsonc"} exts := []string{"*.yao", "*.json", "*.jsonc"}
err := application.App.Walk("tasks", func(root, file string, isdir bool) error { err = application.App.Walk("tasks", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -17,10 +17,19 @@ var Widgets = map[string]*DSL{}
// Load Widgets // Load Widgets
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the widgets directory does not exist
exists, err := application.App.Exists("widgets")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.wid.yao", "*.wid.json", "*.wid.jsonc"} exts := []string{"*.wid.yao", "*.wid.json", "*.wid.jsonc"}
messages := []string{} messages := []string{}
err := application.App.Walk("widgets", func(root, file string, isdir bool) error { err = application.App.Walk("widgets", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -55,9 +55,19 @@ func LoadAndExport(cfg config.Config) error {
// Load load task // Load load task
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the charts directory does not exist
exists, err := application.App.Exists("charts")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.yao", "*.json", "*.jsonc"} exts := []string{"*.yao", "*.json", "*.jsonc"}
err := application.App.Walk("charts", func(root, file string, isdir bool) error { err = application.App.Walk("charts", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -55,9 +55,19 @@ func LoadAndExport(cfg config.Config) error {
// Load load task // Load load task
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the charts directory does not exist
exists, err := application.App.Exists("dashboards")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.yao", "*.json", "*.jsonc"} exts := []string{"*.yao", "*.json", "*.jsonc"}
err := application.App.Walk("dashboards", func(root, file string, isdir bool) error { err = application.App.Walk("dashboards", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -78,9 +78,19 @@ func LoadAndExport(cfg config.Config) error {
// Load load task // Load load task
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the charts directory does not exist
exists, err := application.App.Exists("forms")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.form.yao", "*.form.json", "*.form.jsonc"} exts := []string{"*.form.yao", "*.form.json", "*.form.jsonc"}
err := application.App.Walk("forms", func(root, file string, isdir bool) error { err = application.App.Walk("forms", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -68,9 +68,18 @@ func LoadAndExport(cfg config.Config) error {
// Load load task // Load load task
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the charts directory does not exist
exists, err := application.App.Exists("lists")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.yao", "*.json", "*.jsonc"} exts := []string{"*.yao", "*.json", "*.jsonc"}
err := application.App.Walk("lists", func(root, file string, isdir bool) error { err = application.App.Walk("lists", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }

View file

@ -30,6 +30,16 @@ func LoadAndExport(cfg config.Config) error {
// Load load login // Load load login
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the login directory does not exist
exists, err := application.App.Exists("logins")
if err != nil {
return err
}
if !exists {
return nil
}
exts := []string{"*.login.yao", "*.login.json", "*.login.jsonc"} exts := []string{"*.login.yao", "*.login.json", "*.login.jsonc"}
return application.App.Walk("logins", func(root, file string, isdir bool) error { return application.App.Walk("logins", func(root, file string, isdir bool) error {
if isdir { if isdir {

View file

@ -107,9 +107,19 @@ func LoadAndExport(cfg config.Config) error {
// Load load table dsl // Load load table dsl
func Load(cfg config.Config) error { func Load(cfg config.Config) error {
// Ignore if the charts directory does not exist
exists, err := application.App.Exists("tables")
if err != nil {
return err
}
if !exists {
return nil
}
messages := []string{} messages := []string{}
exts := []string{"*.tab.yao", "*.tab.json", "*.tab.jsonc"} exts := []string{"*.tab.yao", "*.tab.json", "*.tab.jsonc"}
err := application.App.Walk("tables", func(root, file string, isdir bool) error { err = application.App.Walk("tables", func(root, file string, isdir bool) error {
if isdir { if isdir {
return nil return nil
} }