1packagecmd 2 3import( 4"fmt" 5"os" 6"path" 7"path/filepath" 8"strings" 910"github.com/cli/browser"11"github.com/pomdtr/smallweb/internal/app"12"github.com/spf13/cobra"13)1415funcNewCmdOpen()*cobra.Command{16varflagsstruct{17appstring18}1920cmd:=&cobra.Command{21Use:"open [app]",22Short:"Open an app in the browser",23Args:cobra.NoArgs,24RunE:func(cmd*cobra.Command,args[]string)error{25appName:=flags.app26ifflags.app==""{27cwd,err:=os.Getwd()28iferr!=nil{29returnfmt.Errorf("could not get current working directory: %v",err)30}3132ifcwd==path.Clean(k.String("dir")){33returnfmt.Errorf("not in an app directory")34}3536if!strings.HasPrefix(cwd,k.String("dir")){37returnfmt.Errorf("not in an app directory")38}3940appDir:=cwd41forfilepath.Dir(appDir)!=k.String("dir"){42appDir=filepath.Dir(appDir)43}4445appName=filepath.Base(appDir)46}4748a,err:=app.LoadApp(appName,k.String("dir"),k.String("domain"))49iferr!=nil{50returnfmt.Errorf("failed to load app: %w",err)51}5253iferr:=browser.OpenURL(a.URL);err!=nil{54returnfmt.Errorf("failed to open browser: %w",err)55}5657returnnil58},59}6061cmd.Flags().StringVarP(&flags.app,"app","a","","The app to open")62cmd.RegisterFlagCompletionFunc("app",completeApp)6364returncmd65}