package cmd import ( "fmt" "github.com/pomdtr/smallweb/internal/app" "github.com/pomdtr/smallweb/internal/worker" "github.com/spf13/cobra" ) func NewCmdRun() *cobra.Command { cmd := &cobra.Command{ Use: "run [args...]", Short: "Run an app cli", ValidArgsFunction: completeApp, PreRunE: func(cmd *cobra.Command, args []string) error { if _, err := checkDenoVersion(); err != nil { return err } return nil }, RunE: func(cmd *cobra.Command, args []string) error { if len(args) == 0 { return cmd.Help() } if args[0] == "-h" || args[0] == "--help" { return cmd.Help() } a, err := app.LoadApp(args[0], k.String("dir"), k.String("domain")) if err != nil { return fmt.Errorf("failed to load app: %w", err) } wk := worker.NewWorker(a, k.Bool(fmt.Sprintf("apps.%s.admin", a.Name)), nil) command, err := wk.Command(cmd.Context(), args[1:]) if err != nil { return fmt.Errorf("failed to create command: %w", err) } cmd.SilenceErrors = true command.Stdin = cmd.InOrStdin() command.Stdout = cmd.OutOrStdout() command.Stderr = cmd.ErrOrStderr() return command.Run() }, } cmd.Flags().SetInterspersed(false) return cmd }