diff --git a/.changeset/tidy-seas-dance.md b/.changeset/tidy-seas-dance.md new file mode 100644 index 00000000000..7a6402fec1c --- /dev/null +++ b/.changeset/tidy-seas-dance.md @@ -0,0 +1,7 @@ +--- +"@pnpm/config": minor +"@pnpm/core": minor +"pnpm": minor +--- + +When `ignore-compatibility-db` is set to `true`, the [compatibility database](https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-extensions/sources/index.ts) will not be used to patch dependencies [#5132](https://github.com/pnpm/pnpm/issues/5132). diff --git a/packages/config/src/Config.ts b/packages/config/src/Config.ts index 6d93403a720..7e12c041362 100644 --- a/packages/config/src/Config.ts +++ b/packages/config/src/Config.ts @@ -28,6 +28,7 @@ export interface Config { dir: string bin: string ignoreScripts?: boolean + ignoreCompatibilityDb?: boolean includeWorkspaceRoot?: boolean save?: boolean saveProd?: boolean diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 8b4ba2a58c2..30a274f7699 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -60,6 +60,7 @@ export const types = Object.assign({ 'git-branch-lockfile': Boolean, hoist: Boolean, 'hoist-pattern': Array, + 'ignore-compatibility-db': Boolean, 'ignore-pnpmfile': Boolean, 'ignore-workspace': Boolean, 'ignore-workspace-root-check': Boolean, diff --git a/packages/core/src/getPeerDependencyIssues.ts b/packages/core/src/getPeerDependencyIssues.ts index dc6ceaf299d..2fb95a9ad2e 100644 --- a/packages/core/src/getPeerDependencyIssues.ts +++ b/packages/core/src/getPeerDependencyIssues.ts @@ -8,6 +8,7 @@ import { DEFAULT_REGISTRIES } from '@pnpm/normalize-registries' export type ListMissingPeersOptions = Partial & Pick { nodeLinker: 'isolated', overrides: {}, ownLifecycleHooksStdio: 'inherit', + ignoreCompatibilityDb: false, ignorePackageManifest: false, packageExtensions: {}, packageManager, diff --git a/packages/core/src/install/index.ts b/packages/core/src/install/index.ts index 461e13ceea3..5b6d5ceffb7 100644 --- a/packages/core/src/install/index.ts +++ b/packages/core/src/install/index.ts @@ -177,6 +177,7 @@ export async function mutateModules ( // so reading its manifest explicitly here. await safeReadProjectManifestOnly(opts.lockfileDir) opts.hooks.readPackage = createReadPackageHook({ + ignoreCompatibilityDb: opts.ignoreCompatibilityDb, readPackageHook: opts.hooks.readPackage, overrides: opts.overrides, lockfileDir: opts.lockfileDir, @@ -546,12 +547,14 @@ export function createObjectChecksum (obj: Object) { export function createReadPackageHook ( { + ignoreCompatibilityDb, lockfileDir, overrides, packageExtensions, peerDependencyRules, readPackageHook, }: { + ignoreCompatibilityDb?: boolean lockfileDir: string overrides?: Record packageExtensions?: Record @@ -563,7 +566,9 @@ export function createReadPackageHook ( if (!isEmpty(overrides ?? {})) { hooks.push(createVersionsOverrider(overrides!, lockfileDir)) } - hooks.push(createPackageExtender(fromPairs(compatPackageExtensions))) + if (!ignoreCompatibilityDb) { + hooks.push(createPackageExtender(fromPairs(compatPackageExtensions))) + } if (!isEmpty(packageExtensions ?? {})) { hooks.push(createPackageExtender(packageExtensions!)) } diff --git a/packages/core/test/install/packageExtensions.ts b/packages/core/test/install/packageExtensions.ts index 31a1b2cde70..58fa17a6d0d 100644 --- a/packages/core/test/install/packageExtensions.ts +++ b/packages/core/test/install/packageExtensions.ts @@ -114,3 +114,18 @@ test('manifests are patched by extensions from the compatibility database', asyn const lockfile = await project.readLockfile() expect(lockfile.packages['/debug/4.0.0'].peerDependenciesMeta?.['supports-color']?.optional).toBe(true) }) + +test('manifests are not patched by extensions from the compatibility database when ignoreCompatibilityDb is true', async () => { + const project = prepareEmpty() + + await addDependenciesToPackage( + {}, + ['debug@4.0.0'], + await testDefaults({ + ignoreCompatibilityDb: true, + }) + ) + + const lockfile = await project.readLockfile() + expect(lockfile.packages['/debug/4.0.0'].peerDependenciesMeta).toBeUndefined() +})