From d399cd2f7d10a83fac1f84bea51afc0f160560ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20L=C3=B3pez?= Date: Fri, 13 Mar 2026 20:59:28 +0100 Subject: [PATCH] Throw if `npm install` returns non-zero exit code Closes #251 --- resources/NpmDsc/NpmDsc.psm1 | 8 +++++++- tests/NpmDsc/NpmDsc.tests.ps1 | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/resources/NpmDsc/NpmDsc.psm1 b/resources/NpmDsc/NpmDsc.psm1 index 64f7b4bc..a418bf66 100644 --- a/resources/NpmDsc/NpmDsc.psm1 +++ b/resources/NpmDsc/NpmDsc.psm1 @@ -17,8 +17,14 @@ function Invoke-Npm { [Parameter(Mandatory = $true)] [string]$Command ) + $value = Invoke-Expression -Command "npm $Command" - return Invoke-Expression -Command "npm $Command" + if ($LASTEXITCODE -ne 0) { + $errors = Get-NpmErrorMessages -LogPath (GetNpmPath) + throw "Command 'npm $($Command.Trim())' failed: $($errors -join '; ')" + } + + return $value } function Set-PackageDirectory { diff --git a/tests/NpmDsc/NpmDsc.tests.ps1 b/tests/NpmDsc/NpmDsc.tests.ps1 index 3162aeee..0b1472e2 100644 --- a/tests/NpmDsc/NpmDsc.tests.ps1 +++ b/tests/NpmDsc/NpmDsc.tests.ps1 @@ -85,6 +85,10 @@ Describe 'NpmPackage' { $finalState.InDesiredState | Should -Be $true } + It 'Throws if npm returns non-zero exit code' -Skip:(!$IsWindows) { + { Invoke-Npm '!' } | Should -Throw "Command 'npm !' failed:*" + } + It 'Performs whatif operation successfully' -Skip:(!$IsWindows) { $whatIfState = @{ Name = 'react'