Skip to content

Commit f3b0c43

Browse files
wraithgarfritzy
authored andcommitted
fix: keep saveTypes separate for each add
1 parent fd0eebe commit f3b0c43

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

workspaces/arborist/lib/add-rm-pkg-deps.js

+12-11
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,24 @@ const localeCompare = require('@isaacs/string-locale-compare')('en')
55

66
const add = ({ pkg, add, saveBundle, saveType }) => {
77
for (const { name, rawSpec } of add) {
8+
let addSaveType = saveType
89
// if the user does not give us a type, we infer which type(s)
910
// to keep based on the same order of priority we do when
1011
// building the tree as defined in the _loadDeps method of
1112
// the node class.
12-
if (!saveType) {
13-
saveType = inferSaveType(pkg, name)
13+
if (!addSaveType) {
14+
addSaveType = inferSaveType(pkg, name)
1415
}
1516

16-
if (saveType === 'prod') {
17+
if (addSaveType === 'prod') {
1718
// a production dependency can only exist as production (rpj ensures it
1819
// doesn't coexist w/ optional)
1920
deleteSubKey(pkg, 'devDependencies', name, 'dependencies')
2021
deleteSubKey(pkg, 'peerDependencies', name, 'dependencies')
21-
} else if (saveType === 'dev') {
22+
} else if (addSaveType === 'dev') {
2223
// a dev dependency may co-exist as peer, or optional, but not production
2324
deleteSubKey(pkg, 'dependencies', name, 'devDependencies')
24-
} else if (saveType === 'optional') {
25+
} else if (addSaveType === 'optional') {
2526
// an optional dependency may co-exist as dev (rpj ensures it doesn't
2627
// coexist w/ prod)
2728
deleteSubKey(pkg, 'peerDependencies', name, 'optionalDependencies')
@@ -31,23 +32,23 @@ const add = ({ pkg, add, saveBundle, saveType }) => {
3132
deleteSubKey(pkg, 'optionalDependencies', name, 'peerDependencies')
3233
}
3334

34-
const depType = saveTypeMap.get(saveType)
35+
const depType = saveTypeMap.get(addSaveType)
3536

3637
pkg[depType] = pkg[depType] || {}
3738
if (rawSpec !== '' || pkg[depType][name] === undefined) {
3839
pkg[depType][name] = rawSpec || '*'
3940
}
40-
if (saveType === 'optional') {
41+
if (addSaveType === 'optional') {
4142
// Affordance for previous npm versions that require this behaviour
4243
pkg.dependencies = pkg.dependencies || {}
4344
pkg.dependencies[name] = pkg.optionalDependencies[name]
4445
}
4546

46-
if (saveType === 'peer' || saveType === 'peerOptional') {
47+
if (addSaveType === 'peer' || addSaveType === 'peerOptional') {
4748
const pdm = pkg.peerDependenciesMeta || {}
48-
if (saveType === 'peer' && pdm[name] && pdm[name].optional) {
49+
if (addSaveType === 'peer' && pdm[name] && pdm[name].optional) {
4950
pdm[name].optional = false
50-
} else if (saveType === 'peerOptional') {
51+
} else if (addSaveType === 'peerOptional') {
5152
pdm[name] = pdm[name] || {}
5253
pdm[name].optional = true
5354
pkg.peerDependenciesMeta = pdm
@@ -59,7 +60,7 @@ const add = ({ pkg, add, saveBundle, saveType }) => {
5960
}
6061
}
6162

62-
if (saveBundle && saveType !== 'peer' && saveType !== 'peerOptional') {
63+
if (saveBundle && addSaveType !== 'peer' && addSaveType !== 'peerOptional') {
6364
// keep it sorted, keep it unique
6465
const bd = new Set(pkg.bundleDependencies || [])
6566
bd.add(name)

workspaces/arborist/test/add-rm-pkg-deps.js

+16
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,22 @@ t.test('add', t => {
1717
}
1818
process.on('log', log)
1919
t.teardown(() => process.off('log', log))
20+
t.strictSame(add({
21+
pkg: {
22+
dependencies: { bar: '1' },
23+
devDependencies: { foo: '2' },
24+
},
25+
add: [
26+
foo1,
27+
bar,
28+
],
29+
path: '/',
30+
}), {
31+
dependencies: { bar: '1' },
32+
devDependencies: { foo: '1' },
33+
}, 'inferred save types stay the same for each dependency')
34+
35+
t.strictSame(logs, [])
2036
t.strictSame(add({
2137
pkg: {
2238
dependencies: { bar: '1' },

0 commit comments

Comments
 (0)