@@ -7,36 +7,51 @@ import { isPrereleaseCli, updateJsonFile } from '../../utils/project';
7
7
const snapshots = require ( '../../ng-snapshot/package.json' ) ;
8
8
9
9
export default async function ( ) {
10
- let tag = ( await isPrereleaseCli ( ) ) ? '@next' : '' ;
11
- await ng ( 'add' , `@angular/material${ tag } ` , '--skip-confirmation' ) ;
10
+ // `@angular/material` pre-release may not support the current version of `@angular/core` pre-release.
11
+ // due to the order of releases FW -> CLI -> Material
12
+ // In this case peer dependency ranges may not resolve causing npm 7+ to fail during tests.
13
+ const original_NPM_CONFIG_legacy_peer_deps = process . env [ 'NPM_CONFIG_legacy_peer_deps' ] ;
14
+ const isPrerelease = await isPrereleaseCli ( ) ;
12
15
13
- const isSnapshotBuild = getGlobalVariable ( 'argv' ) [ 'ng-snapshots' ] ;
14
- if ( isSnapshotBuild ) {
15
- await updateJsonFile ( 'package.json' , ( packageJson ) => {
16
- const dependencies = packageJson [ 'dependencies' ] ;
17
- // Angular material adds dependencies on other Angular packages
18
- // Iterate over all of the packages to update them to the snapshot version.
19
- for ( const [ name , version ] of Object . entries ( snapshots . dependencies ) ) {
20
- if ( name in dependencies ) {
21
- dependencies [ name ] = version ;
16
+ let tag = isPrerelease ? '@next' : '' ;
17
+
18
+ try {
19
+ process . env [ 'NPM_CONFIG_legacy_peer_deps' ] = isPrerelease
20
+ ? 'true'
21
+ : original_NPM_CONFIG_legacy_peer_deps ;
22
+
23
+ await ng ( 'add' , `@angular/material${ tag } ` , '--skip-confirmation' ) ;
24
+
25
+ const isSnapshotBuild = getGlobalVariable ( 'argv' ) [ 'ng-snapshots' ] ;
26
+ if ( isSnapshotBuild ) {
27
+ await updateJsonFile ( 'package.json' , ( packageJson ) => {
28
+ const dependencies = packageJson [ 'dependencies' ] ;
29
+ // Angular material adds dependencies on other Angular packages
30
+ // Iterate over all of the packages to update them to the snapshot version.
31
+ for ( const [ name , version ] of Object . entries ( snapshots . dependencies ) ) {
32
+ if ( name in dependencies ) {
33
+ dependencies [ name ] = version ;
34
+ }
22
35
}
23
- }
24
36
25
- dependencies [ '@angular/material-moment-adapter' ] =
26
- snapshots . dependencies [ '@angular/material-moment-adapter' ] ;
27
- } ) ;
28
- await installWorkspacePackages ( ) ;
29
- } else {
30
- if ( ! tag ) {
31
- const installedMaterialVersion = JSON . parse ( await readFile ( 'package.json' ) ) [ 'dependencies' ] [
32
- '@angular/material'
33
- ] ;
34
- tag = `@${ installedMaterialVersion } ` ;
37
+ dependencies [ '@angular/material-moment-adapter' ] =
38
+ snapshots . dependencies [ '@angular/material-moment-adapter' ] ;
39
+ } ) ;
40
+ await installWorkspacePackages ( ) ;
41
+ } else {
42
+ if ( ! tag ) {
43
+ const installedMaterialVersion = JSON . parse ( await readFile ( 'package.json' ) ) [ 'dependencies' ] [
44
+ '@angular/material'
45
+ ] ;
46
+ tag = `@${ installedMaterialVersion } ` ;
47
+ }
48
+ await installPackage ( `@angular/material-moment-adapter${ tag } ` ) ;
35
49
}
36
- await installPackage ( `@angular/material-moment-adapter${ tag } ` ) ;
37
- }
38
50
39
- await installPackage ( 'moment' ) ;
51
+ await installPackage ( 'moment' ) ;
52
+ } finally {
53
+ process . env [ 'NPM_CONFIG_legacy_peer_deps' ] = original_NPM_CONFIG_legacy_peer_deps ;
54
+ }
40
55
41
56
await ng ( 'build' ) ;
42
57
0 commit comments