diff --git a/.changeset/perfect-cats-matter.md b/.changeset/perfect-cats-matter.md new file mode 100644 index 0000000000..1d088687a6 --- /dev/null +++ b/.changeset/perfect-cats-matter.md @@ -0,0 +1,5 @@ +--- +"@pnpm/pnpmfile": patch +--- + +Combine global and local filterLog hook with AND diff --git a/packages/pnpmfile/src/requireHooks.ts b/packages/pnpmfile/src/requireHooks.ts index f7b1341a6f..f6920bbb14 100644 --- a/packages/pnpmfile/src/requireHooks.ts +++ b/packages/pnpmfile/src/requireHooks.ts @@ -54,7 +54,7 @@ export default function requireHooks ( prefix, }) } - for (const hookName of ['readPackage', 'afterAllResolved', 'filterLog']) { + for (const hookName of ['readPackage', 'afterAllResolved']) { if (globalHooks[hookName] && hooks[hookName]) { const globalHookContext = createReadPackageHookContext(globalPnpmfile.filename, prefix, hookName) const localHookContext = createReadPackageHookContext(pnpmFile.filename, prefix, hookName) @@ -75,6 +75,13 @@ export default function requireHooks ( cookedHooks[hookName] = (pkg: object) => hook(pkg, context) } } + const globalFilterLog = globalHooks.filterLog + const filterLog = hooks.filterLog + if (globalFilterLog != null && filterLog != null) { + cookedHooks.filterLog = (log: Log) => globalFilterLog(log) && filterLog(log) + } else { + cookedHooks.filterLog = globalFilterLog ?? filterLog + } return cookedHooks } diff --git a/packages/pnpmfile/test/index.ts b/packages/pnpmfile/test/index.ts index 10db87823a..f1675be2ac 100644 --- a/packages/pnpmfile/test/index.ts +++ b/packages/pnpmfile/test/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import { requirePnpmfile, BadReadPackageHookError } from '@pnpm/pnpmfile' +import { requireHooks, requirePnpmfile, BadReadPackageHookError } from '@pnpm/pnpmfile' test('ignoring a pnpmfile that exports undefined', () => { const pnpmfile = requirePnpmfile(path.join(__dirname, 'pnpmfiles/undefined.js'), __dirname) @@ -22,3 +22,21 @@ test('readPackage hook run fails when returned dependencies is not an object ', pnpmfile.hooks.readPackage({}) }).toThrow(new BadReadPackageHookError(pnpmfilePath, 'readPackage hook returned package manifest object\'s property \'dependencies\' must be an object.')) }) + +test('filterLog hook combines with the global hook', () => { + const globalPnpmfile = path.join(__dirname, 'pnpmfiles/globalFilterLog.js') + const pnpmfile = path.join(__dirname, 'pnpmfiles/filterLog.js') + const hooks = requireHooks(__dirname, { globalPnpmfile, pnpmfile }) + + expect(hooks.filterLog).toBeDefined() + expect(hooks.filterLog!({ + name: 'pnpm:summary', + level: 'error', + prefix: 'test', + })).toBeTruthy() + expect(hooks.filterLog!({ + name: 'pnpm:summary', + level: 'debug', + prefix: 'test', + })).toBeFalsy() +}) diff --git a/packages/pnpmfile/test/pnpmfiles/filterLog.js b/packages/pnpmfile/test/pnpmfiles/filterLog.js new file mode 100644 index 0000000000..e7eeffb2d9 --- /dev/null +++ b/packages/pnpmfile/test/pnpmfiles/filterLog.js @@ -0,0 +1,7 @@ +module.exports = { + hooks: {filterLog} +} + +function filterLog(log) { + return log.level === 'debug' || log.level === 'error' +} diff --git a/packages/pnpmfile/test/pnpmfiles/globalFilterLog.js b/packages/pnpmfile/test/pnpmfiles/globalFilterLog.js new file mode 100644 index 0000000000..c994b09fbf --- /dev/null +++ b/packages/pnpmfile/test/pnpmfiles/globalFilterLog.js @@ -0,0 +1,7 @@ +module.exports = { + hooks: {filterLog} +} + +function filterLog(log) { + return log.level === 'error' +}