Skip to content

Commit 5408e2a

Browse files
committed
feat(dependencies): remove dependencies defined under dependencies.javascript.remove
1 parent 9356e61 commit 5408e2a

File tree

6 files changed

+33
-25
lines changed

6 files changed

+33
-25
lines changed

src/coverage/lifter.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ export async function lift({projectRoot, packageManager, vcs}) {
88
const codecovResults = await liftCodecov({projectRoot, packageManager, vcs});
99

1010
if (await nycIsConfigured({projectRoot})) {
11-
const [c8Results] = await Promise.all([
11+
const [c8Results, nycResults] = await Promise.all([
1212
scaffoldC8({projectRoot}),
13-
removeNyc({projectRoot, packageManager})
13+
removeNyc({projectRoot})
1414
]);
1515

1616
return deepmerge.all([
1717
c8Results,
18+
nycResults,
1819
codecovResults,
1920
{
2021
scripts: {'test:unit': 'cross-env NODE_ENV=test c8 run-s test:unit:base'},

src/coverage/lifter.test.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import deepmerge from 'deepmerge';
22
import {lift as liftCodecov} from '@form8ion/codecov';
33

4-
import {describe, vi, it, expect, afterEach} from 'vitest';
4+
import {describe, expect, it, vi} from 'vitest';
55
import any from '@travi/any';
66
import {when} from 'jest-when';
77

@@ -23,17 +23,16 @@ describe('coverage lifter', () => {
2323
const codecovResults = any.simpleObject();
2424
const packageManager = any.word();
2525

26-
afterEach(() => {
27-
vi.clearAllMocks();
28-
});
29-
3026
it('should replace `nyc` with `c8` if nyc config exists', async () => {
27+
const nycResults = any.simpleObject();
3128
const mergedResults = any.simpleObject();
3229
when(scaffoldC8).calledWith({projectRoot}).mockResolvedValue(c8Results);
3330
when(testForNyc).calledWith({projectRoot}).mockResolvedValue(true);
31+
when(removeNyc).calledWith({projectRoot}).mockResolvedValue(nycResults);
3432
when(liftCodecov).calledWith({projectRoot, packageManager, vcs}).mockResolvedValue(codecovResults);
3533
when(deepmerge.all).calledWith([
3634
c8Results,
35+
nycResults,
3736
codecovResults,
3837
{
3938
scripts: {'test:unit': 'cross-env NODE_ENV=test c8 run-s test:unit:base'},
@@ -45,8 +44,6 @@ describe('coverage lifter', () => {
4544
]).mockReturnValue(mergedResults);
4645

4746
expect(await lift({projectRoot, packageManager, vcs})).toEqual(mergedResults);
48-
49-
expect(removeNyc).toHaveBeenCalledWith({projectRoot, packageManager});
5047
});
5148

5249
it('should not replace `nyc` with `c8` if nyc config does not exist', async () => {

src/coverage/nyc/remover.js

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
import {promises as fs} from 'fs';
1+
import {promises as fs} from 'node:fs';
22

3-
import removeDependencies from '../../dependencies/remover.js';
4-
5-
export default async function ({projectRoot, packageManager}) {
3+
export default async function ({projectRoot}) {
64
await Promise.all([
75
fs.unlink(`${projectRoot}/.nycrc`),
8-
fs.rm(`${projectRoot}/.nyc_output`, {recursive: true, force: true}),
9-
removeDependencies({packageManager, dependencies: ['nyc', '@istanbuljs/nyc-config-babel', 'babel-plugin-istanbul']})
6+
fs.rm(`${projectRoot}/.nyc_output`, {recursive: true, force: true})
107
]);
8+
9+
return {
10+
dependencies: {
11+
javascript: {
12+
remove: ['nyc', '@istanbuljs/nyc-config-babel', 'babel-plugin-istanbul']
13+
}
14+
}
15+
};
1116
}

src/coverage/nyc/remover.test.js

+2-8
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ import {promises as fs} from 'node:fs';
33
import {describe, it, expect, vi, afterEach} from 'vitest';
44
import any from '@travi/any';
55

6-
import removeDependencies from '../../dependencies/remover.js';
76
import removeNyc from './remover.js';
87

98
vi.mock('node:fs');
10-
vi.mock('../../dependencies/remover.js');
119

1210
describe('nyc remover', () => {
1311
afterEach(() => {
@@ -16,15 +14,11 @@ describe('nyc remover', () => {
1614

1715
it('should remove configuration and dependencies', async () => {
1816
const projectRoot = any.string();
19-
const packageManager = any.word();
2017

21-
await removeNyc({projectRoot, packageManager});
18+
const {dependencies} = await removeNyc({projectRoot});
2219

2320
expect(fs.unlink).toHaveBeenCalledWith(`${projectRoot}/.nycrc`);
2421
expect(fs.rm).toHaveBeenCalledWith(`${projectRoot}/.nyc_output`, {recursive: true, force: true});
25-
expect(removeDependencies).toHaveBeenCalledWith({
26-
packageManager,
27-
dependencies: ['nyc', '@istanbuljs/nyc-config-babel', 'babel-plugin-istanbul']
28-
});
22+
expect(dependencies.javascript.remove).toEqual(['nyc', '@istanbuljs/nyc-config-babel', 'babel-plugin-istanbul']);
2923
});
3024
});

src/dependencies/processor.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {error, info} from '@travi/cli-messages';
22
import {DEV_DEPENDENCY_TYPE, PROD_DEPENDENCY_TYPE} from '@form8ion/javascript-core';
33

44
import install from './installer.js';
5+
import remove from './remover.js';
56

67
export default async function ({dependencies = {}, devDependencies, projectRoot, packageManager}) {
78
info('Processing dependencies');
@@ -16,11 +17,12 @@ export default async function ({dependencies = {}, devDependencies, projectRoot,
1617
throw new Error(`Expected dependencies to be an object. Instead received: ${dependencies}`);
1718
}
1819

19-
const {javascript: {production = [], development = []} = {}} = dependencies;
20+
const {javascript: {production = [], development = [], remove: dependenciesToRemove = []} = {}} = dependencies;
2021

2122
try {
2223
await install(production, PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
2324
await install(development, DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
25+
await remove({packageManager, dependencies: dependenciesToRemove});
2426
} catch (e) {
2527
error('Failed to update dependencies');
2628
error(e, {level: 'secondary'});

src/dependencies/processor.test.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import {describe, it, expect, vi} from 'vitest';
44
import any from '@travi/any';
55

66
import installDependencies from './installer.js';
7+
import removeDependencies from './remover.js';
78
import processDependencies from './processor.js';
89

910
vi.mock('./installer.js');
11+
vi.mock('./remover.js');
1012

1113
describe('dependencies processor', () => {
1214
const projectRoot = any.string();
@@ -15,11 +17,17 @@ describe('dependencies processor', () => {
1517
it('should process the provided dependency lists', async () => {
1618
const production = any.listOf(any.word);
1719
const development = any.listOf(any.word);
20+
const remove = any.listOf(any.word);
1821

19-
await processDependencies({dependencies: {javascript: {production, development}}, projectRoot, packageManager});
22+
await processDependencies({
23+
dependencies: {javascript: {production, development, remove}},
24+
projectRoot,
25+
packageManager
26+
});
2027

2128
expect(installDependencies).toHaveBeenCalledWith(production, PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
2229
expect(installDependencies).toHaveBeenCalledWith(development, DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
30+
expect(removeDependencies).toHaveBeenCalledWith({packageManager, dependencies: remove});
2331
});
2432

2533
it('should process as empty lists when dependencies are not provided', async () => {
@@ -41,6 +49,7 @@ describe('dependencies processor', () => {
4149

4250
expect(installDependencies).toHaveBeenCalledWith([], PROD_DEPENDENCY_TYPE, projectRoot, packageManager);
4351
expect(installDependencies).toHaveBeenCalledWith([], DEV_DEPENDENCY_TYPE, projectRoot, packageManager);
52+
expect(removeDependencies).toHaveBeenCalledWith({packageManager, dependencies: []});
4453
});
4554

4655
it('should prevent an installation error from bubbling', async () => {

0 commit comments

Comments
 (0)