Skip to content

Commit

Permalink
fix(lockfile): transitive peer dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
zkochan committed Apr 25, 2019
1 parent 859aed1 commit dec1b42
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
8 changes: 6 additions & 2 deletions packages/resolve-dependencies/src/resolveDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -593,8 +593,12 @@ async function resolveDependency (
let prepare!: boolean
let hasBin!: boolean
if (
ctx.hasManifestInLockfile && !options.update && options.dependencyLockfile && options.relDepPath
&& !pkgResponse.body.updated
ctx.hasManifestInLockfile && !options.update && options.dependencyLockfile && options.relDepPath &&
!pkgResponse.body.updated &&
// peerDependencies field is also used for transitive peer dependencies which should not be linked
// That's why we cannot omit reading package.json of such dependencies.
// This can be removed if we implement something like peerDependenciesMeta.transitive: true
!options.dependencyLockfile.peerDependencies
) {
useManifestInfoFromLockfile = true
prepare = options.dependencyLockfile.prepare === true
Expand Down
33 changes: 33 additions & 0 deletions packages/supi/test/install/peerDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,39 @@ test('peer dependency is resolved from parent package', async (t) => {
])
})

test('transitive peerDependencies field does not break the lockfile on subsequent named install', async (t) => {
preparePackages(t, [
{
name: 'pkg',
}
])
const [{ manifest }] = await mutateModules([
{
dependencySelectors: ['most@1.7.3'],
manifest: {},
mutation: 'installSome',
prefix: path.resolve('pkg'),
},
], await testDefaults())

await mutateModules([
{
dependencySelectors: ['is-positive'],
manifest,
mutation: 'installSome',
prefix: path.resolve('pkg'),
},
], await testDefaults())

const lockfile = await readYamlFile<Lockfile>(WANTED_LOCKFILE)

t.deepEqual(Object.keys(lockfile.packages!['/most/1.7.3_most@1.7.3'].dependencies!), [
'@most/multicast',
'@most/prelude',
'symbol-observable'
])
})

test('peer dependency is resolved from parent package via its alias', async (t) => {
preparePackages(t, [
{
Expand Down

0 comments on commit dec1b42

Please sign in to comment.