From b7442285e7f2911072dfbf02be31fbdbf0ae79b1 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Thu, 14 Jun 2018 17:22:16 +0300 Subject: [PATCH] fix: always group package with its peer dependency ...even if the peer dependency is resolved from the direct parent ref #1217 --- packages/supi/package.json | 2 +- packages/supi/shrinkwrap.yaml | 8 ++++---- packages/supi/src/link/resolvePeers.ts | 5 ++--- packages/supi/test/install/peerDependencies.ts | 10 ++++++++++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/supi/package.json b/packages/supi/package.json index dd692aeb24..8e55c823f6 100644 --- a/packages/supi/package.json +++ b/packages/supi/package.json @@ -102,7 +102,7 @@ "npm-scripts-info": "^0.3.6", "package-preview": "^1.0.0", "path-name": "^1.0.0", - "pnpm-registry-mock": "^2.0.0", + "pnpm-registry-mock": "^2.1.0", "read-pkg": "^3.0.0", "rimraf": "^2.6.2", "sepia": "^2.0.2", diff --git a/packages/supi/shrinkwrap.yaml b/packages/supi/shrinkwrap.yaml index 501c1cc215..848408ae36 100644 --- a/packages/supi/shrinkwrap.yaml +++ b/packages/supi/shrinkwrap.yaml @@ -82,7 +82,7 @@ devDependencies: npm-scripts-info: 0.3.7 package-preview: 1.0.6 path-name: 1.0.0 - pnpm-registry-mock: 2.0.0 + pnpm-registry-mock: 2.1.0 read-pkg: 3.0.0 rimraf: 2.6.2 sepia: 2.0.2 @@ -3543,7 +3543,7 @@ packages: dev: false resolution: integrity: sha1-dB2ZeXYv362T8+Rp3rSoFNNDAAg= - /pnpm-registry-mock/2.0.0: + /pnpm-registry-mock/2.1.0: dependencies: anonymous-npm-registry-client: 0.1.2 cpr: 3.0.1 @@ -3553,7 +3553,7 @@ packages: engines: node: '>=6' resolution: - integrity: sha512-hb/ifS3t6RhgwkILvs7lkWK6ZtZuea0s0AG5RrVkZDS2sL3fF81+bHF50DcpdEGbJKJPloC0jUhIfFXdSZ8rUQ== + integrity: sha512-CdVJPZNJDQagEUZBOYdG/nikpvu2ftAPNui6OzOSl8GtyMerfeD++OIQRS/S5K1xGRYoPQvL5reHlBbrLKa3Yg== /pnpm-shrinkwrap/6.4.0: dependencies: '@pnpm/resolver-base': 1.1.0 @@ -5007,7 +5007,7 @@ specifiers: path-exists: ^3.0.0 path-name: ^1.0.0 pnpm-install-checks: ^1.1.0 - pnpm-registry-mock: ^2.0.0 + pnpm-registry-mock: ^2.1.0 pnpm-shrinkwrap: ^6.4.0 ramda: ^0.25.0 read-pkg: ^3.0.0 diff --git a/packages/supi/src/link/resolvePeers.ts b/packages/supi/src/link/resolvePeers.ts index 8fd45e455b..09b86a9584 100644 --- a/packages/supi/src/link/resolvePeers.ts +++ b/packages/supi/src/link/resolvePeers.ts @@ -137,7 +137,7 @@ function resolvePeersOfNode ( ...parentParentPkgs, ...toPkgByName(R.keys(children).map((alias) => ({alias, nodeId: children[alias], node: ctx.pkgGraph[children[alias]]}))), } - const unknownResolvedPeersOfChildren = resolvePeersOfChildren(children, parentPkgs, ctx, nodeId) + const unknownResolvedPeersOfChildren = resolvePeersOfChildren(children, parentPkgs, ctx) const resolvedPeers = R.isEmpty(node.pkg.peerDependencies) ? {} @@ -213,7 +213,6 @@ function resolvePeersOfChildren ( depGraph: DepGraphNodesByDepPath, pkgGraph: PkgGraphNodeByNodeId, }, - exceptNodeId?: string, ): {[alias: string]: string} { const allResolvedPeers: {[alias: string]: string} = {} @@ -222,7 +221,7 @@ function resolvePeersOfChildren ( } const unknownResolvedPeersOfChildren = R.keys(allResolvedPeers) - .filter((alias) => !children[alias] && allResolvedPeers[alias] !== exceptNodeId) + .filter((alias) => !children[alias]) .reduce((acc, peer) => { acc[peer] = allResolvedPeers[peer] return acc diff --git a/packages/supi/test/install/peerDependencies.ts b/packages/supi/test/install/peerDependencies.ts index 6eb4bac7c4..064b4576e6 100644 --- a/packages/supi/test/install/peerDependencies.ts +++ b/packages/supi/test/install/peerDependencies.ts @@ -287,6 +287,16 @@ test('package that resolves its own peer dependency', async (t: tape.Test) => { t.ok(shr.packages['/pkg-with-resolved-peer/1.0.0'].optionalDependencies['peer-b']) }) +test('package that has parent as peer dependency', async (t: tape.Test) => { + const project = prepare(t) + await installPkgs(['has-alpha', 'alpha'], await testDefaults()) + + const shr = await project.loadShrinkwrap() + + t.ok(shr.packages['/has-alpha-as-peer/1.0.0/alpha@1.0.0']) + t.ok(shr.packages['/has-alpha-as-peer/1.0.0']) +}) + test('own peer installed in root as well is linked to root', async (t: tape.Test) => { const project = prepare(t)