diff --git a/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.ts b/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.ts index 239ba8656..7882fa93b 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.ts @@ -8,10 +8,12 @@ export function pnpmToOutdatedResult(output: string): OutdatedResult { filterOutWarnings(output), ) as PnpmOutdatedResultJson; + // "current" may be missing if package is not installed + // Fallback to "wanted" - same approach as npm return objectToEntries(pnpmOutdated).map( - ([name, { current, latest, dependencyType: type }]) => ({ + ([name, { current, latest, wanted, dependencyType: type }]) => ({ name, - current, + current: current || wanted, latest, type, }), diff --git a/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.unit.test.ts b/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.unit.test.ts index 7e38b838a..53ba20a44 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.unit.test.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/pnpm/outdated-result.unit.test.ts @@ -11,11 +11,13 @@ describe('pnpmToOutdatedResult', () => { cypress: { current: '8.5.0', latest: '13.6.0', + wanted: '8.5.0', dependencyType: 'devDependencies', }, '@cypress/request': { current: '2.88.10', latest: '3.0.0', + wanted: '2.88.10', dependencyType: 'devDependencies', }, } satisfies PnpmOutdatedResultJson), @@ -49,11 +51,13 @@ describe('pnpmToOutdatedResult', () => { "cypress": { "current": "8.5.0", "latest": "13.6.0", + "wanted": "8.5.0", "dependencyType": "devDependencies" }, "@cypress/request": { "current": "2.88.10", "latest": "3.0.0", + "wanted": "2.88.10", "dependencyType": "devDependencies" } } @@ -74,4 +78,35 @@ describe('pnpmToOutdatedResult', () => { }, ]); }); + + it('should handle dependencies with missing current version by falling back to wanted', () => { + const output = JSON.stringify({ + '@angular/animations': { + latest: '21.0.1', + wanted: '20.3.12', + dependencyType: 'dependencies', + }, + rxjs: { + current: '7.8.0', + latest: '7.8.1', + wanted: '7.8.0', + dependencyType: 'dependencies', + }, + }); + + expect(pnpmToOutdatedResult(output)).toEqual([ + { + name: '@angular/animations', + current: '20.3.12', + latest: '21.0.1', + type: 'dependencies', + }, + { + name: 'rxjs', + current: '7.8.0', + latest: '7.8.1', + type: 'dependencies', + }, + ]); + }); }); diff --git a/packages/plugin-js-packages/src/lib/package-managers/pnpm/types.ts b/packages/plugin-js-packages/src/lib/package-managers/pnpm/types.ts index 80c2aa40d..132642923 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/pnpm/types.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/pnpm/types.ts @@ -20,8 +20,9 @@ export type PnpmAuditResultJson = { // Subset of PNPM outdated JSON type export type PnpmVersionOverview = { - current: string; + current?: string; latest: string; + wanted: string; dependencyType: DependencyGroupLong; }; export type PnpmOutdatedResultJson = Record;