From 25ea501ae746ace8a59cff3733beb9229dd25423 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Tue, 2 Aug 2022 01:47:01 +0300 Subject: [PATCH] feat: ignore-compatibility-db (#5140) close #5132 --- .changeset/tidy-seas-dance.md | 7 +++++++ packages/config/src/Config.ts | 1 + packages/config/src/index.ts | 1 + packages/core/src/getPeerDependencyIssues.ts | 2 ++ packages/core/src/install/extendInstallOptions.ts | 2 ++ packages/core/src/install/index.ts | 7 ++++++- packages/core/test/install/packageExtensions.ts | 15 +++++++++++++++ 7 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .changeset/tidy-seas-dance.md 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 cf01a748407..5f3955e2df8 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 save?: boolean saveProd?: boolean saveDev?: boolean diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 3a86a9d29ac..5f5fd876cfe 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -61,6 +61,7 @@ export const types = Object.assign({ 'global-pnpmfile': String, 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 0db7eefe87e..002ebb0a64a 100644 --- a/packages/core/src/getPeerDependencyIssues.ts +++ b/packages/core/src/getPeerDependencyIssues.ts @@ -9,6 +9,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 5a0ba6ad5b0..7bfe4af5aa8 100644 --- a/packages/core/src/install/index.ts +++ b/packages/core/src/install/index.ts @@ -174,6 +174,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, @@ -504,12 +505,14 @@ export function createObjectChecksum (obj: Object) { export function createReadPackageHook ( { + ignoreCompatibilityDb, lockfileDir, overrides, packageExtensions, peerDependencyRules, readPackageHook, }: { + ignoreCompatibilityDb?: boolean lockfileDir: string overrides?: Record packageExtensions?: Record @@ -521,7 +524,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() +})