From 47d5ac803c1e0016c352751131dcad04043120ac Mon Sep 17 00:00:00 2001 From: Jon de la Motte Date: Thu, 14 Apr 2022 15:49:38 -0700 Subject: [PATCH 1/5] fix: fixes bug #4565 --- packages/resolve-dependencies/src/resolveDependencies.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/resolve-dependencies/src/resolveDependencies.ts b/packages/resolve-dependencies/src/resolveDependencies.ts index f9e83436d94..9f0604dfd40 100644 --- a/packages/resolve-dependencies/src/resolveDependencies.ts +++ b/packages/resolve-dependencies/src/resolveDependencies.ts @@ -287,7 +287,8 @@ async function resolveDependenciesOfDependency ( options.workspacePackages, extendedWantedDep.wantedDependency, { defaultTag: ctx.defaultTag, registry: ctx.registries.default } - ) + ) && + ctx.linkWorkspacePackagesDepth !== -1 // fix for #4565 ) || ctx.updatedSet.has(extendedWantedDep.infoFromLockfile.name!) const resolveDependencyOpts: ResolveDependencyOptions = { From 34d9c154b8dc0a66646f888caa12bb3ad1942ef7 Mon Sep 17 00:00:00 2001 From: Jon de la Motte Date: Thu, 14 Apr 2022 15:50:14 -0700 Subject: [PATCH 2/5] chore(lint): fix an invalid main field --- utils/eslint-config/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/utils/eslint-config/package.json b/utils/eslint-config/package.json index f89413eb150..04ea2bab04c 100644 --- a/utils/eslint-config/package.json +++ b/utils/eslint-config/package.json @@ -10,8 +10,7 @@ "bugs": { "url": "https://github.com/pnpm/eslint-config/issues" }, - "main": "lib/index.js", - "types": "lib/index.d.ts", + "main": "index.js", "directories": { "test": "test" }, From 7d1065173adacb00648892661beff5d6f98cc234 Mon Sep 17 00:00:00 2001 From: Jon de la Motte Date: Thu, 14 Apr 2022 15:58:12 -0700 Subject: [PATCH 3/5] chore: add changeset --- .changeset/strange-parents-drum.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/strange-parents-drum.md diff --git a/.changeset/strange-parents-drum.md b/.changeset/strange-parents-drum.md new file mode 100644 index 00000000000..d31b9400ffe --- /dev/null +++ b/.changeset/strange-parents-drum.md @@ -0,0 +1,5 @@ +--- +"@pnpm/resolve-dependencies": patch +--- + +fix #4565 which was incorrectly marking some packages for npm resolution with `link-workspace-packages=false` From 98d98e424e7693d70f3a75f5da65be8c76c4911e Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 16 Apr 2022 03:57:31 +0300 Subject: [PATCH 4/5] test: add test --- .../core/test/install/multipleImporters.ts | 69 +++++++++++++++++++ .../src/resolveDependencies.ts | 4 +- 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/packages/core/test/install/multipleImporters.ts b/packages/core/test/install/multipleImporters.ts index cb39c16ff30..2cd364ab1fe 100644 --- a/packages/core/test/install/multipleImporters.ts +++ b/packages/core/test/install/multipleImporters.ts @@ -1316,3 +1316,72 @@ test('install the dependency that is already present in the workspace when addin expect(currentLockfile.importers['project-1'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('100.0.0') expect(currentLockfile.importers['project-2'].dependencies?.['dep-of-pkg-with-1-dep']).toBe('100.0.0') }) + +test('do not update dependency that has the same name as a dependency in the workspace', async () => { + await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.0.0', distTag: 'latest' }) + const manifest1: ProjectManifest = { + name: 'project-1', + version: '1.0.0', + dependencies: { + 'dep-of-pkg-with-1-dep': '^100.0.0', + }, + } + const manifest2: ProjectManifest = { name: 'dep-of-pkg-with-1-dep', version: '100.1.0' } + + preparePackages([ + { + location: 'project-1', + package: manifest1, + }, + { + location: 'project-2', + package: manifest2, + }, + ]) + + const importers: MutatedProject[] = [ + { + buildIndex: 0, + manifest: manifest1, + mutation: 'install', + rootDir: path.resolve('project-1'), + }, + { + buildIndex: 0, + manifest: manifest2, + mutation: 'install', + rootDir: path.resolve('project-2'), + }, + ] + const workspacePackages = { + 'project-1': { + '1.0.0': { + dir: path.resolve('project-1'), + manifest: manifest1, + }, + }, + 'dep-of-pkg-with-1-dep': { + '100.1.0': { + dir: path.resolve('project-2'), + manifest: manifest2, + }, + }, + } + await mutateModules(importers, await testDefaults({ linkWorkspacePackagesDepth: -1, workspacePackages })) + await addDistTag({ package: 'dep-of-pkg-with-1-dep', version: '100.1.0', distTag: 'latest' }) + await mutateModules([ + { + ...importers[0], + dependencySelectors: ['is-negative@2.1.0'], + mutation: 'installSome', + }, + importers[1], + ], await testDefaults({ linkWorkspacePackagesDepth: -1, workspacePackages, preferredVersions: {} })) + + const rootModules = assertProject(process.cwd()) + const currentLockfile = await rootModules.readCurrentLockfile() + expect(Object.keys(currentLockfile.packages)).toStrictEqual([ + '/dep-of-pkg-with-1-dep/100.0.0', + '/is-negative/2.1.0', + ]) +}) diff --git a/packages/resolve-dependencies/src/resolveDependencies.ts b/packages/resolve-dependencies/src/resolveDependencies.ts index 9f0604dfd40..f97bcb93106 100644 --- a/packages/resolve-dependencies/src/resolveDependencies.ts +++ b/packages/resolve-dependencies/src/resolveDependencies.ts @@ -283,12 +283,12 @@ async function resolveDependenciesOfDependency ( ) ) || Boolean( (options.workspacePackages != null) && + ctx.linkWorkspacePackagesDepth !== -1 && wantedDepIsLocallyAvailable( options.workspacePackages, extendedWantedDep.wantedDependency, { defaultTag: ctx.defaultTag, registry: ctx.registries.default } - ) && - ctx.linkWorkspacePackagesDepth !== -1 // fix for #4565 + ) ) || ctx.updatedSet.has(extendedWantedDep.infoFromLockfile.name!) const resolveDependencyOpts: ResolveDependencyOptions = { From c98a1e1013fb61b1f65a122df72de2188cc99cdb Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 16 Apr 2022 04:00:13 +0300 Subject: [PATCH 5/5] docs: update changesets --- .changeset/strange-parents-drum.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.changeset/strange-parents-drum.md b/.changeset/strange-parents-drum.md index d31b9400ffe..330b68103e7 100644 --- a/.changeset/strange-parents-drum.md +++ b/.changeset/strange-parents-drum.md @@ -1,5 +1,7 @@ --- "@pnpm/resolve-dependencies": patch +"pnpm": patch --- -fix #4565 which was incorrectly marking some packages for npm resolution with `link-workspace-packages=false` +Don't update a direct dependency that has the same name as a dependency in the workspace, when adding a new dependency to a workspace project [#4575](https://github.com/pnpm/pnpm/pull/4575). +