diff --git a/appcli.go b/appcli.go index b93a4db..36af343 100644 --- a/appcli.go +++ b/appcli.go @@ -63,74 +63,16 @@ func NewCommand(cmdcfg *cli.Command, depfn DepFn) *cli.Command { return cmdcfg } -// RootCommandOpts defines the options for creating a root command. -type RootCommandOpts struct { - // Command is the base command configuration. - Command *cli.Command - - // DepFn is a function that returns the modules that this command depends - // on. Note: All root dependencies will be inherited by all subcommands. - DepFn DepFn -} - // NewRootCommand creates a new root CLI command with the specified configuration. -// Override Before and After to take over app.Lifecycle setup and teardown. Adds -// a verbose flag. See NewCommand for more details on how dependencies are handled. -// Requires an app.Lifecycle to be present in the context when the command is executed. -func NewRootCommand(rootcfg *RootCommandOpts) *cli.Command { - cmdcfg := rootcfg.Command - +// Adds verbose flag and override Before and After methods to handle dependencies. +// See NewCommand for more details. +func NewRootCommand(cmdcfg *cli.Command, depfn DepFn) *cli.Command { cmdcfg.Flags = append(cmdcfg.Flags, &cli.BoolFlag{ Name: "verbose", Aliases: []string{"v"}, Usage: "Enable verbose output", }) - - // Override the before method to handle logger and lifecycle - originalBefore := cmdcfg.Before - cmdcfg.Before = func(ctx context.Context, cmd *cli.Command) (context.Context, error) { - if originalBefore != nil { - var err error - ctx, err = originalBefore(ctx, cmd) - if err != nil { - return ctx, err - } - } - - lifecycle := app.LifecycleFromContext(ctx) - if lifecycle == nil { - return ctx, errors.New("lifecycle not found in context, run root command") - } - - if err := lifecycle.Setup(); err != nil { - return ctx, err - } - - return ctx, nil - } - - // Override the After method to handle cleanup if needed - originalAfter := cmdcfg.After - cmdcfg.After = func(ctx context.Context, cmd *cli.Command) error { - if originalAfter != nil { - if err := originalAfter(ctx, cmd); err != nil { - return err - } - } - - lifecycle := app.LifecycleFromContext(ctx) - if lifecycle == nil { - return errors.New("lifecycle not found in context, cannot clean up root command") - } - - if err := lifecycle.Teardown(); err != nil { - return err - } - - return nil - } - - return NewCommand(cmdcfg, rootcfg.DepFn) + return NewCommand(cmdcfg, depfn) } // VerboseFromCommand checks if the verbose flag is set in the command context.