fix: apply allowBuilds config set via pnpmfile (#10564)

close #10516
This commit is contained in:
Zoltan Kochan
2026-02-09 15:04:28 +01:00
committed by GitHub
parent ea870c786f
commit 00c7677e80
3 changed files with 66 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/cli-utils": patch
"pnpm": patch
---
Fixed `allowBuilds` not working when set via `.pnpmfile.cjs` [#10516](https://github.com/pnpm/pnpm/issues/10516).

View File

@@ -116,4 +116,24 @@ function applyDerivedConfig (config: Config): void {
delete config.hoistPattern
delete config.publicHoistPattern
}
if (config.allowBuilds) {
config.onlyBuiltDependencies ??= []
config.ignoredBuiltDependencies ??= []
const onlyBuiltSet = new Set(config.onlyBuiltDependencies)
const ignoredBuiltSet = new Set(config.ignoredBuiltDependencies)
for (const [packagePattern, build] of Object.entries(config.allowBuilds)) {
switch (build) {
case true:
if (!onlyBuiltSet.has(packagePattern)) {
config.onlyBuiltDependencies.push(packagePattern)
}
break
case false:
if (!ignoredBuiltSet.has(packagePattern)) {
config.ignoredBuiltDependencies.push(packagePattern)
}
break
}
}
}
}

View File

@@ -42,3 +42,43 @@ test('hoist: false removes hoistPattern', async () => {
expect(config.hoist).toBe(false)
expect(config.hoistPattern).toBeUndefined()
})
test('allowBuilds populates onlyBuiltDependencies and ignoredBuiltDependencies', async () => {
prepare()
const config = await getConfig({
allowBuilds: {
'allowed-pkg': true,
'another-allowed': true,
'blocked-pkg': false,
},
}, {
workspaceDir: '.',
excludeReporter: false,
rcOptionsTypes: {},
})
expect(config.onlyBuiltDependencies).toContain('allowed-pkg')
expect(config.onlyBuiltDependencies).toContain('another-allowed')
expect(config.ignoredBuiltDependencies).toContain('blocked-pkg')
})
test('allowBuilds does not add duplicates', async () => {
prepare()
const config = await getConfig({
onlyBuiltDependencies: ['already-allowed'],
ignoredBuiltDependencies: ['already-blocked'],
allowBuilds: {
'already-allowed': true,
'already-blocked': false,
},
}, {
workspaceDir: '.',
excludeReporter: false,
rcOptionsTypes: {},
})
expect(config.onlyBuiltDependencies).toEqual(['already-allowed'])
expect(config.ignoredBuiltDependencies).toEqual(['already-blocked'])
})