Skip to content

Commit fba34ca

Browse files
authoredMar 6, 2023
fix(angular): fix rxjs package updates and ensure peer deps are installed before other migrations (#15458)
1 parent 7d52fc7 commit fba34ca

File tree

5 files changed

+58
-99
lines changed

5 files changed

+58
-99
lines changed
 

‎packages/angular/migrations.json

+30-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
{
22
"schematics": {
3+
"install-required-packages": {
4+
"cli": "nx",
5+
"version": "15.7.0-beta.1",
6+
"description": "Install the required angular-devkit packages as we do not directly depend on them anymore",
7+
"factory": "./src/migrations/update-15-7-0/install-required-packages"
8+
},
39
"remove-show-circular-dependencies-option": {
410
"cli": "nx",
511
"version": "14.2.0-beta.0",
@@ -51,12 +57,6 @@
5157
"description": "Update the @angular/cli package version to ~14.1.0.",
5258
"factory": "./src/migrations/update-14-5-2/update-angular-cli"
5359
},
54-
"update-rxjs-7-5-0": {
55-
"cli": "nx",
56-
"version": "14.5.7-beta.0",
57-
"description": "Update the rxjs package version to ~7.5.0 if RxJS 7 is used in workspace.",
58-
"factory": "./src/migrations/update-14-5-7/update-rxjs"
59-
},
6060
"update-angular-cli-version-14-2-0": {
6161
"cli": "nx",
6262
"version": "14.6.0-beta.0",
@@ -147,12 +147,6 @@
147147
"description": "Update the @angular/cli package version to ~15.1.0.",
148148
"factory": "./src/migrations/update-15-5-0/update-angular-cli"
149149
},
150-
"install-required-packages": {
151-
"cli": "nx",
152-
"version": "15.7.0-beta.1",
153-
"description": "Install the required angular-devkit packages as we do not directly depend on them anymore",
154-
"factory": "./src/migrations/update-15-7-0/install-required-packages"
155-
},
156150
"update-angular-cli-version-15-2-0": {
157151
"cli": "nx",
158152
"version": "15.8.0-beta.4",
@@ -573,6 +567,18 @@
573567
}
574568
}
575569
},
570+
"14.6.0-rxjs": {
571+
"version": "14.6.0-beta.0",
572+
"requires": {
573+
"rxjs": ">=7.0.0 <7.5.0"
574+
},
575+
"packages": {
576+
"rxjs": {
577+
"version": "~7.5.0",
578+
"alwaysAddToPackageJson": false
579+
}
580+
}
581+
},
576582
"14.8.0-angular-eslint": {
577583
"version": "14.8.0-beta.0",
578584
"packages": {
@@ -918,6 +924,18 @@
918924
"alwaysAddToPackageJson": false
919925
}
920926
}
927+
},
928+
"15.8.6-rxjs": {
929+
"version": "15.8.6-beta.0",
930+
"requires": {
931+
"rxjs": ">=7.5.0 <7.6.0"
932+
},
933+
"packages": {
934+
"rxjs": {
935+
"version": "~7.8.0",
936+
"alwaysAddToPackageJson": false
937+
}
938+
}
921939
}
922940
}
923941
}

‎packages/angular/src/migrations/update-14-5-7/update-rxjs.spec.ts

-55
This file was deleted.

‎packages/angular/src/migrations/update-14-5-7/update-rxjs.ts

-30
This file was deleted.

‎packages/angular/src/migrations/update-15-7-0/install-required-packages.spec.ts

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
// mock stuff that relies or make changes to the filesystem
2+
jest.mock('child_process');
3+
jest.mock('@nrwl/devkit', () => ({
4+
...jest.requireActual('@nrwl/devkit'),
5+
getPackageManagerCommand: jest.fn(() => ({ install: '' })),
6+
writeJsonFile: jest.fn(),
7+
}));
8+
19
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';
210
import { readJson, updateJson } from '@nrwl/devkit';
311
import installRequiredPackages from './install-required-packages';

‎packages/angular/src/migrations/update-15-7-0/install-required-packages.ts

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import type { Tree } from '@nrwl/devkit';
2-
import { addDependenciesToPackageJson, readJson } from '@nrwl/devkit';
2+
import {
3+
addDependenciesToPackageJson,
4+
getPackageManagerCommand,
5+
readJson,
6+
writeJsonFile,
7+
} from '@nrwl/devkit';
8+
import { execSync } from 'child_process';
9+
import { join } from 'path';
310
import { getInstalledAngularMajorVersion } from '../../generators/utils/version-utils';
411
import { getPkgVersionForAngularMajorVersion } from '../../utils/version-utils';
512

@@ -27,6 +34,17 @@ export default async function (tree: Tree) {
2734
(pkg) => !pkgJson.devDependencies?.[pkg] && !pkgJson.dependencies?.[pkg]
2835
)
2936
.reduce((allPkgs, pkg) => ({ ...allPkgs, [pkg]: angularCliVersion }), {});
30-
37+
// even though we are going to install the packages directly, we still want
38+
// to add them to the tree so the migrate command knows changes were made
3139
addDependenciesToPackageJson(tree, {}, { ...filteredPackages });
40+
41+
// we need to install them immediately so the packages are available for
42+
// other migrations that might be using them
43+
pkgJson.devDependencies ??= {};
44+
Object.entries(filteredPackages).forEach(([pkg, version]) => {
45+
pkgJson.devDependencies[pkg] = version;
46+
});
47+
writeJsonFile(join(tree.root, 'package.json'), pkgJson);
48+
const pmc = getPackageManagerCommand();
49+
execSync(pmc.install, { stdio: [0, 1, 2] });
3250
}

0 commit comments

Comments
 (0)
Please sign in to comment.