From 7af8c6b504bf8623e145f5330731209a4fee82a2 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Wed, 23 Mar 2022 03:14:29 +0200 Subject: [PATCH 1/4] feat: don't include workspace root when filtering --- .../plugin-commands-installation/src/recursive.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/packages/plugin-commands-installation/src/recursive.ts b/packages/plugin-commands-installation/src/recursive.ts index 4c34f5b0386..0a3ed86fc1f 100755 --- a/packages/plugin-commands-installation/src/recursive.ts +++ b/packages/plugin-commands-installation/src/recursive.ts @@ -262,19 +262,6 @@ export default async function recursive ( } as MutatedProject) } })) - if (!opts.selectedProjectsGraph[opts.workspaceDir] && manifestsByPath[opts.workspaceDir] != null) { - const localConfig = await memReadLocalConfig(opts.workspaceDir) - const modulesDir = localConfig.modulesDir ?? opts.modulesDir - const { manifest, writeProjectManifest } = manifestsByPath[opts.workspaceDir] - writeProjectManifests.push(writeProjectManifest) - mutatedImporters.push({ - buildIndex: 0, - manifest, - modulesDir, - mutation: 'install', - rootDir: opts.workspaceDir, - } as MutatedProject) - } if ((mutatedImporters.length === 0) && cmdFullName === 'update' && opts.depth === 0) { throw new PnpmError('NO_PACKAGE_IN_DEPENDENCIES', 'None of the specified packages were found in the dependencies of any of the projects.') From 9b1ed84b881fb51f86fed081528aec5c1d62d256 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 31 Mar 2022 02:59:51 +0300 Subject: [PATCH 2/4] feat: don't resolve peers from workspace root --- packages/pnpm/test/monorepo/index.ts | 29 ------------------- .../resolve-dependencies/src/resolvePeers.ts | 7 +---- 2 files changed, 1 insertion(+), 35 deletions(-) diff --git a/packages/pnpm/test/monorepo/index.ts b/packages/pnpm/test/monorepo/index.ts index baefda99721..4447649c870 100644 --- a/packages/pnpm/test/monorepo/index.ts +++ b/packages/pnpm/test/monorepo/index.ts @@ -1498,32 +1498,3 @@ test('pnpm run should include the workspace root when --workspace-root option is expect(await exists('test')).toBeTruthy() expect(await exists('project/test')).toBeTruthy() }) - -test('peer dependencies are resolved from the root of the workspace when a new dependency is added to a workspace project', async () => { - const projects = preparePackages([ - { - location: '.', - package: { - name: 'project-1', - version: '1.0.0', - - dependencies: { - ajv: '4.10.4', - }, - }, - }, - { - name: 'project-2', - version: '1.0.0', - }, - ]) - - await writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] }) - - process.chdir('project-2') - - await execPnpm(['add', 'ajv-keywords@1.5.0', '--strict-peer-dependencies']) - - const lockfile = await projects['project-1'].readLockfile() - expect(lockfile.packages).toHaveProperty(['/ajv-keywords/1.5.0_ajv@4.10.4']) -}) diff --git a/packages/resolve-dependencies/src/resolvePeers.ts b/packages/resolve-dependencies/src/resolvePeers.ts index b9484b64789..fadfb41cfd2 100644 --- a/packages/resolve-dependencies/src/resolvePeers.ts +++ b/packages/resolve-dependencies/src/resolvePeers.ts @@ -67,16 +67,11 @@ export default function ( const depGraph: GenericDependenciesGraph = {} const pathsByNodeId = {} const _createPkgsByName = createPkgsByName.bind(null, opts.dependenciesTree) - const rootProject = opts.projects.length > 1 ? opts.projects.find(({ id }) => id === '.') : null - const rootPkgsByName = rootProject == null ? {} : _createPkgsByName(rootProject) const peerDependencyIssuesByProjects: PeerDependencyIssuesByProjects = {} for (const { directNodeIdsByAlias, topParents, rootDir, id } of opts.projects) { const peerDependencyIssues: Pick = { bad: {}, missing: {} } - const pkgsByName = { - ...rootPkgsByName, - ..._createPkgsByName({ directNodeIdsByAlias, topParents }), - } + const pkgsByName = _createPkgsByName({ directNodeIdsByAlias, topParents }) resolvePeersOfChildren(directNodeIdsByAlias, pkgsByName, { dependenciesTree: opts.dependenciesTree, From c396619d88c3bd614e68774ffeabab530adffbf1 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 31 Mar 2022 03:18:02 +0300 Subject: [PATCH 3/4] test: remove redundant test --- .../core/test/install/peerDependencies.ts | 86 ------------------- 1 file changed, 86 deletions(-) diff --git a/packages/core/test/install/peerDependencies.ts b/packages/core/test/install/peerDependencies.ts index 212af4374fd..92227037aab 100644 --- a/packages/core/test/install/peerDependencies.ts +++ b/packages/core/test/install/peerDependencies.ts @@ -224,92 +224,6 @@ test('strict-peer-dependencies: error is thrown when cannot resolve peer depende }) }) -test('peer dependency is resolved from the dependencies of the workspace root project', async () => { - const projects = preparePackages([ - { - location: '.', - package: { name: 'root' }, - }, - { - location: 'pkg', - package: {}, - }, - ]) - const reporter = jest.fn() - await mutateModules([ - { - buildIndex: 0, - manifest: { - name: 'root', - version: '1.0.0', - - dependencies: { - ajv: '4.10.0', - }, - }, - mutation: 'install', - rootDir: process.cwd(), - }, - { - buildIndex: 0, - manifest: { - name: 'pkg', - version: '1.0.0', - - dependencies: { - 'ajv-keywords': '1.5.0', - }, - }, - mutation: 'install', - rootDir: path.resolve('pkg'), - }, - ], await testDefaults({ reporter })) - - expect(reporter).not.toHaveBeenCalledWith(expect.objectContaining({ - name: 'pnpm:peer-dependency-issues', - })) - - { - const lockfile = await projects.root.readLockfile() - expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0') - } - - await mutateModules([ - { - buildIndex: 0, - manifest: { - name: 'root', - version: '1.0.0', - - dependencies: { - ajv: '4.10.0', - }, - }, - mutation: 'install', - rootDir: process.cwd(), - }, - { - buildIndex: 0, - manifest: { - name: 'pkg', - version: '1.0.0', - - dependencies: { - 'ajv-keywords': '1.5.0', - 'is-positive': '1.0.0', - }, - }, - mutation: 'install', - rootDir: path.resolve('pkg'), - }, - ], await testDefaults({ reporter })) - - { - const lockfile = await projects.root.readLockfile() - expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0') - } -}) - test('warning is reported when cannot resolve peer dependency for non-top-level dependency', async () => { prepareEmpty() await addDistTag({ package: 'abc-parent-with-ab', version: '1.0.0', distTag: 'latest' }) From 510ff151b9a2af6075fe4a24505178a2a92aab1c Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 31 Mar 2022 03:20:03 +0300 Subject: [PATCH 4/4] docs: add changesets --- .changeset/nice-comics-fly.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/nice-comics-fly.md diff --git a/.changeset/nice-comics-fly.md b/.changeset/nice-comics-fly.md new file mode 100644 index 00000000000..27b9439e1aa --- /dev/null +++ b/.changeset/nice-comics-fly.md @@ -0,0 +1,8 @@ +--- +"@pnpm/core": major +"@pnpm/plugin-commands-installation": major +"pnpm": major +"@pnpm/resolve-dependencies": major +--- + +Dependencies of the root workspace project are not used to resolve peer dependencies of other workspace projects.