diff --git a/cmd/npm/npm.go b/cmd/npm/npm.go index 234b9af..a82cd1c 100644 --- a/cmd/npm/npm.go +++ b/cmd/npm/npm.go @@ -2,9 +2,9 @@ package npm import ( _ "embed" - "fmt" "github.com/safedep/pmg/config" + "github.com/safedep/pmg/internal/ui" "github.com/spf13/cobra" ) @@ -16,10 +16,15 @@ func NewNpmCommand() *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { config, err := config.FromContext(cmd.Context()) if err != nil { - return fmt.Errorf("failed to get config: %w", err) + ui.Fatalf("Failed to get config: %s", err) } - return executeNpmFlow(cmd.Context(), config, args) + err = executeNpmFlow(cmd.Context(), config, args) + if err != nil { + ui.Fatalf("Failed to execute npm flow: %s", err) + } + + return nil }, } } diff --git a/cmd/npm/pnpm.go b/cmd/npm/pnpm.go index e849f12..fdbe9ba 100644 --- a/cmd/npm/pnpm.go +++ b/cmd/npm/pnpm.go @@ -2,9 +2,9 @@ package npm import ( _ "embed" - "fmt" "github.com/safedep/pmg/config" + "github.com/safedep/pmg/internal/ui" "github.com/spf13/cobra" ) @@ -16,10 +16,15 @@ func NewPnpmCommand() *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { config, err := config.FromContext(cmd.Context()) if err != nil { - return fmt.Errorf("failed to get config: %w", err) + ui.Fatalf("Failed to get config: %s", err) } - return executePnpmFlow(cmd.Context(), config, args) + err = executePnpmFlow(cmd.Context(), config, args) + if err != nil { + ui.Fatalf("Failed to execute pnpm flow: %s", err) + } + + return nil }, } } diff --git a/internal/ui/ui.go b/internal/ui/ui.go index d66d1cd..2958e4f 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -101,6 +101,13 @@ func GetConfirmationOnMalware(malwarePackages []*analyzer.PackageVersionAnalysis return false, nil } +func Fatalf(msg string, args ...interface{}) { + ClearStatus() + + fmt.Println(Colors.Red(fmt.Sprintf(msg, args...))) + os.Exit(1) +} + // Format the string to be maximum maxWidth. Use newlines to wrap the text. func termWidthFormatText(text string, maxWidth int) string { words := strings.Split(text, " ") diff --git a/packagemanager/npm_test.go b/packagemanager/npm_test.go index 4f14c34..f807fc8 100644 --- a/packagemanager/npm_test.go +++ b/packagemanager/npm_test.go @@ -97,6 +97,18 @@ func TestNpmParseCommand(t *testing.T) { assert.Equal(t, "@types/react", parsedCommand.InstallTargets[1].PackageVersion.Package.Name) }, }, + { + name: "second package has a version", + command: "npm i express @types/node@1.2.3", + assert: func(t *testing.T, parsedCommand *ParsedCommand, err error) { + assert.NoError(t, err) + assert.Equal(t, 2, len(parsedCommand.InstallTargets)) + assert.Equal(t, "express", parsedCommand.InstallTargets[0].PackageVersion.Package.Name) + assert.Empty(t, parsedCommand.InstallTargets[0].PackageVersion.Version) + assert.Equal(t, "@types/node", parsedCommand.InstallTargets[1].PackageVersion.Package.Name) + assert.Equal(t, "1.2.3", parsedCommand.InstallTargets[1].PackageVersion.Version) + }, + }, } for _, tc := range cases {