From d583fbb2ad7e6b986d133a4eaf60824713f13c06 Mon Sep 17 00:00:00 2001 From: jereklas <65559301+jereklas@users.noreply.github.com> Date: Tue, 28 Feb 2023 04:57:02 -0800 Subject: [PATCH] fix: allowedVersions corner case when only parent>child selectors exist (#6148) --- .changeset/unlucky-avocados-unite.md | 5 +++++ .../src/createPeerDependencyPatcher.ts | 9 ++++----- .../test/createPeerDependencyPatcher.test.ts | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 .changeset/unlucky-avocados-unite.md diff --git a/.changeset/unlucky-avocados-unite.md b/.changeset/unlucky-avocados-unite.md new file mode 100644 index 0000000000..76b6bc244f --- /dev/null +++ b/.changeset/unlucky-avocados-unite.md @@ -0,0 +1,5 @@ +--- +"@pnpm/hooks.read-package-hook": patch +--- + +Fixed issue where allowedVersions wouldn't apply correctly if only parent>child selectors were used diff --git a/hooks/read-package-hook/src/createPeerDependencyPatcher.ts b/hooks/read-package-hook/src/createPeerDependencyPatcher.ts index 270ac24c83..9de1ca9d1d 100644 --- a/hooks/read-package-hook/src/createPeerDependencyPatcher.ts +++ b/hooks/read-package-hook/src/createPeerDependencyPatcher.ts @@ -36,11 +36,10 @@ export function createPeerDependencyPatcher ( pkg.peerDependencies![peerName] = '*' continue } - if ( - !peerDependencyRules.allowedVersions?.[peerName] || - peerVersion === '*' - ) continue - if (peerDependencyRules.allowedVersions[peerName] === '*') { + if (!allowedVersions?.[peerName] || peerVersion === '*') { + continue + } + if (allowedVersions?.[peerName].includes('*')) { pkg.peerDependencies![peerName] = '*' continue } diff --git a/hooks/read-package-hook/test/createPeerDependencyPatcher.test.ts b/hooks/read-package-hook/test/createPeerDependencyPatcher.test.ts index fc2d7ff9e1..ca4dbebcad 100644 --- a/hooks/read-package-hook/test/createPeerDependencyPatcher.test.ts +++ b/hooks/read-package-hook/test/createPeerDependencyPatcher.test.ts @@ -168,6 +168,25 @@ test('createPeerDependencyPatcher() overrides peerDependencies when parent>child }) }) +// corner case exists when a 'parent>child' allowedVersion selector is used without a 'child' selector +test('createPeerDependencyPatcher() corner case correctly applies override', () => { + const patcher = createPeerDependencyPatcher({ + allowedVersions: { + 'foo>bar': '2', + }, + }) + + const patchedPkg = patcher({ + name: 'foo', + peerDependencies: { + bar: '0 || 1', + }, + }) as ProjectManifest + expect(patchedPkg.peerDependencies).toStrictEqual({ + bar: '0 || 1 || 2', + }) +}) + test('createPeerDependencyPathcer() throws expected error if parent>child selector cannot parse', () => { expect(() => createPeerDependencyPatcher({ allowedVersions: {