diff --git a/lib/modules/manager/npm/__fixtures__/inputs/02.json b/lib/modules/manager/npm/__fixtures__/inputs/02.json index d17132e5db5831..024a963584e16c 100644 --- a/lib/modules/manager/npm/__fixtures__/inputs/02.json +++ b/lib/modules/manager/npm/__fixtures__/inputs/02.json @@ -13,6 +13,11 @@ "@babel/core": "7.0.0", "config": "1.21.0" }, + "pnpm": { + "overrides": { + "express>cookie": "0.7.0" + } + }, "homepage": "https://keylocation.sg", "keywords": [ "Key Location", diff --git a/lib/modules/manager/npm/extract/common/package-file.ts b/lib/modules/manager/npm/extract/common/package-file.ts index 03882c1b172bdb..b81fbf137fbdec 100644 --- a/lib/modules/manager/npm/extract/common/package-file.ts +++ b/lib/modules/manager/npm/extract/common/package-file.ts @@ -84,19 +84,26 @@ export function extractPackageJson( ), ); } else if (depType === 'pnpm' && depName === 'overrides') { + // pnpm overrides + // https://pnpm.io/package_json#pnpmoverrides for (const [overridesKey, overridesVal] of Object.entries( val as unknown as NpmPackageDependency, )) { if (is.string(overridesVal)) { + // Newer flat syntax: `parent>parent>child` + const packageName = overridesKey.split('>').pop()!; dep = { depName: overridesKey, + packageName, depType: 'pnpm.overrides', - ...extractDependency(depName, overridesKey, overridesVal), + ...extractDependency(depName, packageName, overridesVal), }; setNodeCommitTopic(dep); + // TODO: Is this expected? It's always 'overrides'. dep.prettyDepType = depTypes[depName]; deps.push(dep); } else if (is.object(overridesVal)) { + // Older nested object syntax: `parent: { parent: { child: version } }` deps.push( ...extractOverrideDepsRec( [overridesKey], diff --git a/lib/modules/manager/npm/extract/index.spec.ts b/lib/modules/manager/npm/extract/index.spec.ts index cd9de9df443251..715692c11896e8 100644 --- a/lib/modules/manager/npm/extract/index.spec.ts +++ b/lib/modules/manager/npm/extract/index.spec.ts @@ -1052,6 +1052,14 @@ describe('modules/manager/npm/extract/index', () => { depType: 'dependencies', prettyDepType: 'dependency', }, + { + currentValue: '0.7.0', + datasource: 'npm', + depName: 'express>cookie', + packageName: 'cookie', + depType: 'pnpm.overrides', + prettyDepType: 'overrides', + }, ], extractedConstraints: {}, managerData: {