Skip to content
This repository has been archived by the owner on Jan 20, 2022. It is now read-only.

Commit

Permalink
Do not drop peer/dev dep while saving if both set
Browse files Browse the repository at this point in the history
  • Loading branch information
isaacs committed Sep 30, 2020
1 parent a8f5454 commit fac2e53
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 7 deletions.
19 changes: 12 additions & 7 deletions lib/add-rm-pkg-deps.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const removeFromOthers = (name, type, pkg) => {
break
case 'peer':
case 'peerOptional':
others.delete('devDependencies')
others.delete('peerDependencies')
others.delete('peerDependenciesMeta')
break
Expand All @@ -44,9 +45,9 @@ const addSingle = ({pkg, spec, saveBundle, saveType}) => {
const { name, rawSpec } = spec
removeFromOthers(name, saveType, pkg)
const type = saveType === 'prod' ? 'dependencies'
: saveType === 'dev' ? 'devDependencies'
: saveType === 'optional' ? 'optionalDependencies'
: saveType === 'peer' || saveType === 'peerOptional' ? 'peerDependencies'
: saveType === 'dev' ? 'devDependencies'
: /* istanbul ignore next */ null

pkg[type] = pkg[type] || {}
Expand All @@ -62,6 +63,10 @@ const addSingle = ({pkg, spec, saveBundle, saveType}) => {
pdm[name].optional = true
pkg.peerDependenciesMeta = pdm
}
// peerDeps are often also a devDep, so that they can be tested when
// package managers that don't auto-install peer deps
if (pkg.devDependencies && pkg.devDependencies[name] !== undefined)
pkg.devDependencies[name] = pkg.peerDependencies[name]
}

if (saveBundle) {
Expand All @@ -82,16 +87,16 @@ const getSaveType = (pkg, spec) => {
peerDependenciesMeta: peerDepsMeta,
} = pkg

if (devDeps && devDeps[name] !== undefined)
return 'dev'
else if (optDeps && optDeps[name] !== undefined)
return 'optional'
else if (peerDeps && peerDeps[name] !== undefined) {
if (peerDeps && peerDeps[name] !== undefined) {
if (peerDepsMeta && peerDepsMeta[name] && peerDepsMeta[name].optional)
return 'peerOptional'
else
return 'peer'
} else
} else if (devDeps && devDeps[name] !== undefined)
return 'dev'
else if (optDeps && optDeps[name] !== undefined)
return 'optional'
else
return 'prod'
}

Expand Down
24 changes: 24 additions & 0 deletions test/add-rm-pkg-deps.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,30 @@ t.test('add', t => {
devDependencies: { foo: '2' },
}, 'update dev')

t.strictSame(add({
pkg: {
devDependencies: { foo: '1' },
peerDependencies: { foo: '1' },
},
add: [ foo2 ],
}), {
devDependencies: { foo: '2' },
peerDependencies: { foo: '2' },
}, 'update dev and peer together')

t.strictSame(add({
pkg: {
devDependencies: { foo: '1' },
peerDependencies: { foo: '1' },
peerDependenciesMeta: { foo: { optional: true }},
},
add: [ foo2 ],
}), {
devDependencies: { foo: '2' },
peerDependencies: { foo: '2' },
peerDependenciesMeta: { foo: { optional: true }},
}, 'update dev and peerOptional together')

t.end()
})

Expand Down

0 comments on commit fac2e53

Please sign in to comment.