fix: combine global and local filterLog hook with AND (#3966)

This commit is contained in:
ylemkimon
2021-11-09 05:49:31 +09:00
committed by GitHub
parent 4d40c120a4
commit b75993ddec
5 changed files with 46 additions and 2 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/pnpmfile": patch
---
Combine global and local filterLog hook with AND

View File

@@ -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
}

View File

@@ -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()
})

View File

@@ -0,0 +1,7 @@
module.exports = {
hooks: {filterLog}
}
function filterLog(log) {
return log.level === 'debug' || log.level === 'error'
}

View File

@@ -0,0 +1,7 @@
module.exports = {
hooks: {filterLog}
}
function filterLog(log) {
return log.level === 'error'
}