Skip to content

Commit 9723859

Browse files
authoredMar 30, 2023
fix(web): add migration for dropped dependencies (#15991)
1 parent 5d51ed9 commit 9723859

File tree

3 files changed

+170
-0
lines changed

3 files changed

+170
-0
lines changed
 

‎packages/web/migrations.json

+6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@
5353
"version": "15.5.4-beta.0",
5454
"description": "Update `@nrwl/web/babel` preset to `@nrwl/js/babel` for projects that have a .babelrc file.",
5555
"factory": "./src/migrations/update-15-5-4/update-babel-preset"
56+
},
57+
"add-dropped-dependencies": {
58+
"cli": "nx",
59+
"version": "15.9.1",
60+
"description": "Add @nrwl/linter, @nrwl/cypress, @nrwl/jest, @nrwl/rollup if they are used",
61+
"factory": "./src/migrations/update-15-9-1/add-dropped-dependencies"
5662
}
5763
},
5864
"packageJsonUpdates": {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import {
2+
addProjectConfiguration,
3+
readJson,
4+
Tree,
5+
updateNxJson,
6+
} from '@nrwl/devkit';
7+
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
8+
9+
import addDroppedDependencies from './add-dropped-dependencies';
10+
11+
describe('addDroppedDependencies', () => {
12+
let tree: Tree;
13+
14+
beforeEach(() => {
15+
tree = createTreeWithEmptyWorkspace();
16+
17+
addProjectConfiguration(tree, 'project-with-no-targets', {
18+
root: 'proj-with-no-targets',
19+
});
20+
addProjectConfiguration(tree, 'project-with-command', {
21+
root: 'proj-with-command',
22+
targets: {
23+
run: {
24+
command: 'echo hi',
25+
},
26+
},
27+
});
28+
});
29+
30+
it('should add rollup', async () => {
31+
addProjectConfiguration(tree, 'rollup-project', {
32+
root: 'rollup-proj',
33+
targets: {
34+
build: {
35+
executor: '@nrwl/rollup:rollup',
36+
options: {},
37+
},
38+
},
39+
});
40+
41+
await addDroppedDependencies(tree);
42+
43+
expect(
44+
readJson(tree, 'package.json').devDependencies['@nrwl/rollup']
45+
).toBeDefined();
46+
expect(
47+
readJson(tree, 'package.json').devDependencies['@nrwl/cypress']
48+
).not.toBeDefined();
49+
});
50+
51+
it('should add cypress', async () => {
52+
addProjectConfiguration(tree, 'cypress-project', {
53+
root: 'cypress-proj',
54+
targets: {
55+
build: {
56+
executor: '@nrwl/cypress:cypress',
57+
options: {},
58+
},
59+
},
60+
});
61+
62+
await addDroppedDependencies(tree);
63+
64+
expect(
65+
readJson(tree, 'package.json').devDependencies['@nrwl/cypress']
66+
).toBeDefined();
67+
expect(
68+
readJson(tree, 'package.json').devDependencies['@nrwl/rollup']
69+
).not.toBeDefined();
70+
});
71+
72+
it('should add linter', async () => {
73+
addProjectConfiguration(tree, 'linter-project', {
74+
root: 'linter-proj',
75+
targets: {
76+
build: {
77+
executor: '@nrwl/linter:eslint',
78+
options: {},
79+
},
80+
},
81+
});
82+
83+
await addDroppedDependencies(tree);
84+
85+
expect(
86+
readJson(tree, 'package.json').devDependencies['@nrwl/linter']
87+
).toBeDefined();
88+
expect(
89+
readJson(tree, 'package.json').devDependencies['@nrwl/cypress']
90+
).not.toBeDefined();
91+
});
92+
93+
it('should add a dependency if it is used in nx.json', async () => {
94+
updateNxJson(tree, {
95+
targetDefaults: {
96+
build: {
97+
executor: '@nrwl/linter:eslint',
98+
options: {},
99+
},
100+
test: {
101+
options: {},
102+
},
103+
},
104+
});
105+
106+
await addDroppedDependencies(tree);
107+
108+
expect(
109+
readJson(tree, 'package.json').devDependencies['@nrwl/linter']
110+
).toBeDefined();
111+
expect(
112+
readJson(tree, 'package.json').devDependencies['@nrwl/cypress']
113+
).not.toBeDefined();
114+
});
115+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import {
2+
addDependenciesToPackageJson,
3+
formatFiles,
4+
getProjects,
5+
NX_VERSION,
6+
readNxJson,
7+
Tree,
8+
} from '@nrwl/devkit';
9+
10+
export default async function addDroppedDependencies(tree: Tree) {
11+
const devDependencies = {};
12+
const droppedDependencies = [
13+
'@nrwl/linter',
14+
'@nrwl/cypress',
15+
'@nrwl/jest',
16+
'@nrwl/rollup',
17+
];
18+
const projects = getProjects(tree);
19+
20+
for (const [_, projectConfiguration] of projects) {
21+
for (const [_, targetConfiguration] of Object.entries(
22+
projectConfiguration.targets ?? {}
23+
)) {
24+
for (const droppedDependency of droppedDependencies) {
25+
if (targetConfiguration.executor?.startsWith(droppedDependency + ':')) {
26+
devDependencies[droppedDependency] = NX_VERSION;
27+
}
28+
}
29+
}
30+
}
31+
32+
const nxJson = readNxJson(tree);
33+
34+
for (const [_, targetConfiguration] of Object.entries(
35+
nxJson?.targetDefaults ?? {}
36+
)) {
37+
for (const droppedDependency of droppedDependencies) {
38+
if (targetConfiguration.executor?.startsWith(droppedDependency + ':')) {
39+
devDependencies[droppedDependency] = NX_VERSION;
40+
}
41+
}
42+
}
43+
44+
if (Object.keys(devDependencies).length > 0) {
45+
addDependenciesToPackageJson(tree, {}, devDependencies);
46+
}
47+
48+
await formatFiles(tree);
49+
}

0 commit comments

Comments
 (0)
Please sign in to comment.