// Package launcher orchestrates the application lifecycle. // // A Launcher manages infrastructure components through three ordered phases: // // 1. OnInit — all components initialize in registration order // 2. BeforeStart hooks — dependency injection wiring runs // 3. OnStart — all components start in registration order // // On shutdown (OS signal or programmatic Shutdown call), OnStop is called for // every component in reverse registration order, ensuring dependents stop // before their dependencies. // // Usage: // // logger := logz.New(logz.Options{JSON: true}) // lc := launcher.New(logger) // // lc.Append(db, cache, server) // lc.BeforeStart(func() error { // return server.RegisterRoutes(db, cache) // }) // // if err := lc.Run(); err != nil { // logger.Error("launcher failed", err) // os.Exit(1) // } package launcher