From 0fe9272158e2080996e8f93e2c22f9f7953cfee4 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 20 Oct 2022 22:54:54 +0300 Subject: [PATCH] fix: hooks (#5534) --- .changeset/sixty-laws-relate.md | 5 +++ .../src/createReadPackageHook.ts | 10 +++--- .../test/createReadPackageHook.ts | 31 +++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 .changeset/sixty-laws-relate.md diff --git a/.changeset/sixty-laws-relate.md b/.changeset/sixty-laws-relate.md new file mode 100644 index 0000000000..20cd58058c --- /dev/null +++ b/.changeset/sixty-laws-relate.md @@ -0,0 +1,5 @@ +--- +"@pnpm/hooks.read-package-hook": patch +--- + +The custom hooks should be executed after the peer dependency patcher hook. diff --git a/packages/hooks.read-package-hook/src/createReadPackageHook.ts b/packages/hooks.read-package-hook/src/createReadPackageHook.ts index b7e80fd441..b238f1c9db 100644 --- a/packages/hooks.read-package-hook/src/createReadPackageHook.ts +++ b/packages/hooks.read-package-hook/src/createReadPackageHook.ts @@ -40,6 +40,11 @@ export function createReadPackageHook ( if (!isEmpty(packageExtensions ?? {})) { hooks.push(createPackageExtender(packageExtensions!)) } + if (Array.isArray(readPackageHook)) { + hooks.push(...readPackageHook) + } else if (readPackageHook) { + hooks.push(readPackageHook) + } if ( peerDependencyRules != null && ( @@ -50,11 +55,6 @@ export function createReadPackageHook ( ) { hooks.push(createPeerDependencyPatcher(peerDependencyRules)) } - if (Array.isArray(readPackageHook)) { - hooks.push(...readPackageHook) - } else if (readPackageHook) { - hooks.push(readPackageHook) - } if (hooks.length === 0) { return undefined diff --git a/packages/hooks.read-package-hook/test/createReadPackageHook.ts b/packages/hooks.read-package-hook/test/createReadPackageHook.ts index 5a1a77a430..c9b009757d 100644 --- a/packages/hooks.read-package-hook/test/createReadPackageHook.ts +++ b/packages/hooks.read-package-hook/test/createReadPackageHook.ts @@ -14,3 +14,34 @@ test('createReadPackageHook() is passing directory to all hooks', async () => { expect(hook1).toBeCalledWith(manifest, dir) expect(hook2).toBeCalledWith(manifest, dir) }) + +test('createReadPackageHook() runs the custom hook before the peer rules hook', async () => { + const hook = jest.fn((manifest) => ({ + ...manifest, + dependencies: { ...manifest.peerDependencies }, + })) + const readPackageHook = createReadPackageHook({ + ignoreCompatibilityDb: true, + lockfileDir: '/foo', + readPackageHook: [hook], + peerDependencyRules: { + allowAny: ['*'], + }, + }) + const manifest = { + peerDependencies: { + react: '16', + }, + } + const dir = '/bar' + const updatedManifest = await readPackageHook!(manifest, dir) + expect(hook).toBeCalledWith(manifest, dir) + expect(updatedManifest).toStrictEqual({ + dependencies: { + react: '16', + }, + peerDependencies: { + react: '*', + }, + }) +})