Skip to content

Commit 0a95c28

Browse files
Fix bug with removing multiple dependencies (#25)
1 parent d8291ba commit 0a95c28

File tree

2 files changed

+43
-5
lines changed

2 files changed

+43
-5
lines changed

source/add-remove-dependencies.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ export async function removePackageDependencies(filePath, dependencies, options)
3737
delete pkg.dependencies[dependency];
3838
}
3939
} else {
40-
for (const [dependencyKey, dependency] of Object.entries(dependencies)) {
41-
delete pkg[dependencyKey][dependency];
40+
for (const [dependencyKey, _dependencies] of Object.entries(dependencies)) {
41+
for (const dependency of _dependencies) {
42+
delete pkg[dependencyKey][dependency];
43+
}
4244
}
4345
}
4446

@@ -70,8 +72,10 @@ export function removePackageDependenciesSync(filePath, dependencies, options) {
7072
delete pkg.dependencies[dependency];
7173
}
7274
} else {
73-
for (const [dependencyKey, dependency] of Object.entries(dependencies)) {
74-
delete pkg[dependencyKey][dependency];
75+
for (const [dependencyKey, _dependencies] of Object.entries(dependencies)) {
76+
for (const dependency of _dependencies) {
77+
delete pkg[dependencyKey][dependency];
78+
}
7579
}
7680
}
7781

test/remove-dependencies.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import path from 'node:path';
22
import fs, {promises as fsPromises} from 'node:fs';
33
import test from 'ava';
4-
import {omit} from 'filter-anything';
4+
import {omit, pick} from 'filter-anything';
55
import {temporaryDirectory} from 'tempy';
66
import {readPackage, readPackageSync} from 'read-pkg';
77
import {removePackageDependencies, removePackageDependenciesSync, writePackage, writePackageSync} from '../index.js';
@@ -49,6 +49,23 @@ test('async - multiple types', async t => {
4949
t.deepEqual(packageJson, omit(fixture, ['dependencies', 'devDependencies.bar']));
5050
});
5151

52+
test('async - multiple types with multiple dependencies', async t => {
53+
const temporary = temporaryDirectory();
54+
55+
const fixture = {
56+
name: 'foo',
57+
dependencies: {foo: '1.0.0', bar: '1.0.0', baz: '1.0.0'},
58+
devDependencies: {foobar: '1.0.0', foobaz: '1.0.0'},
59+
};
60+
61+
await writePackage(temporary, fixture);
62+
63+
await removePackageDependencies(temporary, {dependencies: ['foo', 'bar'], devDependencies: ['foobar', 'foobaz']});
64+
const packageJson = await readPackage({cwd: temporary, normalize: false});
65+
66+
t.deepEqual(packageJson, pick(fixture, ['name', 'dependencies.baz']));
67+
});
68+
5269
test('async - should not throw if package.json does not exist', async t => {
5370
const temporary = temporaryDirectory();
5471
await t.notThrowsAsync(removePackageDependencies(temporary, ['foo']));
@@ -152,6 +169,23 @@ test('sync - multiple types', t => {
152169
t.deepEqual(packageJson, omit(fixture, ['dependencies', 'devDependencies.bar']));
153170
});
154171

172+
test('sync - multiple types with multiple dependencies', t => {
173+
const temporary = temporaryDirectory();
174+
175+
const fixture = {
176+
name: 'foo',
177+
dependencies: {foo: '1.0.0', bar: '1.0.0', baz: '1.0.0'},
178+
devDependencies: {foobar: '1.0.0', foobaz: '1.0.0'},
179+
};
180+
181+
writePackageSync(temporary, fixture);
182+
183+
removePackageDependenciesSync(temporary, {dependencies: ['foo', 'bar'], devDependencies: ['foobar', 'foobaz']});
184+
const packageJson = readPackageSync({cwd: temporary, normalize: false});
185+
186+
t.deepEqual(packageJson, pick(fixture, ['name', 'dependencies.baz']));
187+
});
188+
155189
test('sync - should not throw if package.json does not exist', t => {
156190
const temporary = temporaryDirectory();
157191
t.notThrows(() => removePackageDependenciesSync(temporary, ['foo']));

0 commit comments

Comments
 (0)