From 78c63bedcf90d5fa5e9ebb9b43fa3c9c2d7e4021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= Date: Fri, 11 Jul 2025 10:29:16 +0200 Subject: [PATCH 1/3] refactor(plugin-js-packages): simplify command args definition --- .../src/lib/package-managers/constants.ts | 2 -- .../src/lib/package-managers/npm/npm.ts | 6 ++--- .../src/lib/package-managers/pnpm/pnpm.ts | 6 ++--- .../yarn-classic/yarn-classic.ts | 9 ++++---- .../yarn-modern/yarn-modern.ts | 22 ++++++++++++------- 5 files changed, 24 insertions(+), 21 deletions(-) delete mode 100644 packages/plugin-js-packages/src/lib/package-managers/constants.ts diff --git a/packages/plugin-js-packages/src/lib/package-managers/constants.ts b/packages/plugin-js-packages/src/lib/package-managers/constants.ts deleted file mode 100644 index da86f3b7b..000000000 --- a/packages/plugin-js-packages/src/lib/package-managers/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const COMMON_AUDIT_ARGS = ['audit', '--json']; -export const COMMON_OUTDATED_ARGS = ['outdated', '--json']; diff --git a/packages/plugin-js-packages/src/lib/package-managers/npm/npm.ts b/packages/plugin-js-packages/src/lib/package-managers/npm/npm.ts index 7935c8709..c4d382397 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/npm/npm.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/npm/npm.ts @@ -1,7 +1,6 @@ import { objectToKeys } from '@code-pushup/utils'; import type { DependencyGroup } from '../../config.js'; import { filterAuditResult } from '../../runner/utils.js'; -import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js'; import type { AuditResults, PackageManager } from '../types.js'; import { npmToAuditResult } from './audit-result.js'; import { npmToOutdatedResult } from './outdated-result.js'; @@ -24,9 +23,10 @@ export const npmPackageManager: PackageManager = { }, audit: { getCommandArgs: groupDep => [ - ...COMMON_AUDIT_ARGS, + 'audit', ...npmDependencyOptions[groupDep], '--audit-level=none', + '--json', ], unifyResult: npmToAuditResult, // prod dependencies need to be filtered out manually since v10 @@ -49,7 +49,7 @@ export const npmPackageManager: PackageManager = { }, }, outdated: { - commandArgs: [...COMMON_OUTDATED_ARGS, '--long'], + commandArgs: ['outdated', '--long', '--json'], unifyResult: npmToOutdatedResult, }, }; diff --git a/packages/plugin-js-packages/src/lib/package-managers/pnpm/pnpm.ts b/packages/plugin-js-packages/src/lib/package-managers/pnpm/pnpm.ts index 9cf1a5023..ac9e06a19 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/pnpm/pnpm.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/pnpm/pnpm.ts @@ -1,7 +1,6 @@ import { objectToKeys } from '@code-pushup/utils'; import type { DependencyGroup } from '../../config.js'; import { filterAuditResult } from '../../runner/utils.js'; -import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js'; import type { AuditResults, PackageManager } from '../types.js'; import { pnpmToAuditResult } from './audit-result.js'; import { pnpmToOutdatedResult } from './outdated-result.js'; @@ -24,8 +23,9 @@ export const pnpmPackageManager: PackageManager = { }, audit: { getCommandArgs: groupDep => [ - ...COMMON_AUDIT_ARGS, + 'audit', ...pnpmDependencyOptions[groupDep], + '--json', ], ignoreExitCode: true, unifyResult: pnpmToAuditResult, @@ -49,7 +49,7 @@ export const pnpmPackageManager: PackageManager = { }, }, outdated: { - commandArgs: COMMON_OUTDATED_ARGS, + commandArgs: ['outdated', '--json'], unifyResult: pnpmToOutdatedResult, }, }; diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts index ce716b688..9357aaaf2 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-classic/yarn-classic.ts @@ -1,5 +1,4 @@ import { dependencyGroupToLong } from '../../constants.js'; -import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js'; import type { PackageManager } from '../types.js'; import { yarnClassicToAuditResult } from './audit-result.js'; import { yarnClassicToOutdatedResult } from './outdated-result.js'; @@ -16,15 +15,15 @@ export const yarnClassicPackageManager: PackageManager = { }, audit: { getCommandArgs: groupDep => [ - ...COMMON_AUDIT_ARGS, - '--groups', - dependencyGroupToLong[groupDep], + 'audit', + `--groups=${dependencyGroupToLong[groupDep]}`, + '--json', ], ignoreExitCode: true, unifyResult: yarnClassicToAuditResult, }, outdated: { - commandArgs: COMMON_OUTDATED_ARGS, + commandArgs: ['outdated', '--json'], unifyResult: yarnClassicToOutdatedResult, }, }; diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts index fc6d20002..5570ca28b 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts @@ -1,6 +1,5 @@ // Yarn v2 does not currently audit optional dependencies import type { DependencyGroup } from '../../config.js'; -import { COMMON_AUDIT_ARGS, COMMON_OUTDATED_ARGS } from '../constants.js'; import type { PackageManager } from '../types.js'; import { yarnBerryToAuditResult } from './audit-result.js'; import { yarnBerryToOutdatedResult } from './outdated-result.js'; @@ -23,18 +22,25 @@ export const yarnModernPackageManager: PackageManager = { outdated: 'https://github.com/mskelton/yarn-plugin-outdated', }, audit: { - getCommandArgs: groupDep => [ - 'npm', - ...COMMON_AUDIT_ARGS, - '--environment', - yarnModernEnvironmentOptions[groupDep], - ], + getCommandArgs: groupDep => { + const environment = yarnModernEnvironmentOptions[groupDep]; + return [ + 'npm', + 'audit', + ...(environment ? [`--environment=${environment}`] : []), + '--json', + ]; + }, supportedDepGroups: ['prod', 'dev'], // Yarn v2 does not support audit for optional dependencies unifyResult: yarnBerryToAuditResult, ignoreExitCode: true, }, outdated: { - commandArgs: [...COMMON_OUTDATED_ARGS, '--workspace=.'], // filter out other packages in case of Yarn workspaces + commandArgs: [ + 'outdated', + '--workspace=.', // filter out other packages in case of Yarn workspaces + '--json', + ], unifyResult: yarnBerryToOutdatedResult, }, }; From 125da73afe522b7a221df814d57abdaf0209b7e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= Date: Fri, 11 Jul 2025 10:58:16 +0200 Subject: [PATCH 2/3] fix(plugin-js-packages): include url for outdated packages in modern yarn --- .../src/lib/package-managers/yarn-modern/outdated-result.ts | 3 ++- .../package-managers/yarn-modern/outdated-result.unit.test.ts | 1 + .../src/lib/package-managers/yarn-modern/types.ts | 2 ++ .../src/lib/package-managers/yarn-modern/yarn-modern.ts | 1 + 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts index 1be7e1e6b..ac2e50d7e 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.ts @@ -4,10 +4,11 @@ import type { YarnBerryOutdatedResultJson } from './types.js'; export function yarnBerryToOutdatedResult(output: string): OutdatedResult { const npmOutdated = JSON.parse(output) as YarnBerryOutdatedResultJson; - return npmOutdated.map(({ name, current, latest, type }) => ({ + return npmOutdated.map(({ name, current, latest, type, url }) => ({ name, current, latest, type, + ...(url && { url }), })); } diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.unit.test.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.unit.test.ts index 423e84ed4..88bfcc094 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.unit.test.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/outdated-result.unit.test.ts @@ -10,6 +10,7 @@ describe('yarnBerryToOutdatedResult', () => { current: '16.8.1', latest: '17.0.0', type: 'dependencies', + url: 'https://nx.dev/', }, { name: 'vite', diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/types.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/types.ts index 7ddfd0569..a8e64a446 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/types.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/types.ts @@ -36,7 +36,9 @@ export type YarnBerryOutdatedPackage = { current: string; latest: string; name: string; + range?: string; type: DependencyGroupLong; + url?: string; workspace?: string; }; diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts index 5570ca28b..ac4604a01 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts @@ -39,6 +39,7 @@ export const yarnModernPackageManager: PackageManager = { commandArgs: [ 'outdated', '--workspace=.', // filter out other packages in case of Yarn workspaces + '--url', '--json', ], unifyResult: yarnBerryToOutdatedResult, From 75dae6bd094a018fd8eff44e7238e87d1e787ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= Date: Fri, 11 Jul 2025 11:01:22 +0200 Subject: [PATCH 3/3] fix(plugin-js-packages): include transitive dependencies in audit for modern yarn --- .../src/lib/package-managers/yarn-modern/yarn-modern.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts index ac4604a01..a01ccc0b2 100644 --- a/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts +++ b/packages/plugin-js-packages/src/lib/package-managers/yarn-modern/yarn-modern.ts @@ -27,6 +27,7 @@ export const yarnModernPackageManager: PackageManager = { return [ 'npm', 'audit', + '--recursive', ...(environment ? [`--environment=${environment}`] : []), '--json', ];