Skip to content

Commit

Permalink
fix: auto-install-peers in a workspace
Browse files Browse the repository at this point in the history
wip
  • Loading branch information
zkochan committed Sep 16, 2022
1 parent 5a76017 commit 0de12af
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 11 deletions.
31 changes: 30 additions & 1 deletion packages/core/test/install/autoInstallPeers.ts
Expand Up @@ -134,7 +134,7 @@ test('don\'t auto-install a peer dependency, when that dependency is in the root
].sort())
})

test('don\'t install the same missing peer dependency twice', async () => {
test.only('don\'t install the same missing peer dependency twice', async () => {
await addDistTag({ package: '@pnpm/y', version: '2.0.0', distTag: 'latest' })
const project = prepareEmpty()
await addDependenciesToPackage({}, [
Expand Down Expand Up @@ -295,3 +295,32 @@ test('auto install peer deps in a workspace', async () => {
},
], await testDefaults({ autoInstallPeers: true }))
})

test('auto install peer deps in a workspace', async () => {
prepareEmpty()
await mutateModules([
{
buildIndex: 0,
manifest: {
name: 'root-project',
devDependencies: {
'@pnpm.e2e/abc-parent-with-ab': '1.0.0',
'@pnpm.e2e/peer-c': '1.0.0',
},
},
mutation: 'install',
rootDir: process.cwd(),
},
{
buildIndex: 0,
manifest: {
name: 'project',
peerDependencies: {
'@pnpm.e2e/abc-parent-with-ab': '1.0.0',
},
},
mutation: 'install',
rootDir: path.resolve('project'),
},
], await testDefaults({ autoInstallPeers: true }))
})
47 changes: 37 additions & 10 deletions packages/resolve-dependencies/src/resolveDependencies.ts
Expand Up @@ -591,10 +591,27 @@ async function resolveDependenciesOfDependency (
if (!resolveDependencyResult.isNew) {
return {
resolveDependencyResult,
postponedResolution: async () => ({
missingPeers: await resolveDependencyResult.missingPeersOfChildren.promise,
resolvedPeers: {},
}),
postponedResolution: async (postponedResolutionOpts) => {
const missingPeers = await resolveDependencyResult.missingPeersOfChildren.promise
const newMissing = {} as MissingPeers
const resolvedPeers = {} as ResolvedPeers
for (const [peerName, peerVersion] of Object.entries(missingPeers)) {
// if (!postponedResolutionOpts.parentPkgAliases[peerName]) {
// newMissing[peerName] = range
// }
if (postponedResolutionOpts.parentPkgAliases[peerName]) {
if (postponedResolutionOpts.parentPkgAliases[peerName] !== true) {
resolvedPeers[peerName] = postponedResolutionOpts.parentPkgAliases[peerName] as PkgAddress
}
} else {
newMissing[peerName] = peerVersion
}
}
return {
missingPeers: newMissing,
resolvedPeers,
}
},
}
}

Expand All @@ -611,7 +628,21 @@ async function resolveDependenciesOfDependency (
try {
const result = await postponedResolution(postponedResolutionOpts)
resolveDependencyResult.missingPeersOfChildren.resolve(result.missingPeers)
return result
const newMissing = {} as MissingPeers
const resolvedPeers = {} as ResolvedPeers
for (const [peerName, peerVersion] of Object.entries(result.missingPeers)) {
if (postponedResolutionOpts.parentPkgAliases[peerName]) {
if (postponedResolutionOpts.parentPkgAliases[peerName] !== true) {
resolvedPeers[peerName] = postponedResolutionOpts.parentPkgAliases[peerName] as PkgAddress
}
} else {
newMissing[peerName] = peerVersion
}
}
return {
resolvedPeers,
missingPeers: newMissing,
}
} catch (err) {
resolveDependencyResult.missingPeersOfChildren.reject(err)
throw err
Expand Down Expand Up @@ -1223,11 +1254,7 @@ function getMissingPeers (pkg: PackageManifest, parentPkgAliases: ParentPkgAlias
const missingPeers = {} as MissingPeers
const resolvedPeers = {} as ResolvedPeers
for (const [peerName, peerVersion] of Object.entries(pkg.peerDependencies ?? {})) {
if (parentPkgAliases[peerName]) {
if (parentPkgAliases[peerName] !== true) {
resolvedPeers[peerName] = parentPkgAliases[peerName] as PkgAddress
}
} else if (!pkg.peerDependenciesMeta?.[peerName]?.optional) {
if (!pkg.peerDependenciesMeta?.[peerName]?.optional) {
missingPeers[peerName] = peerVersion
}
}
Expand Down

0 comments on commit 0de12af

Please sign in to comment.