@@ -76,7 +76,8 @@ interface PackageInfo {
76
76
}
77
77
78
78
interface UpdateMetadata {
79
- packageGroup : string [ ] ;
79
+ packageGroupName ?: string ;
80
+ packageGroup : { [ packageName : string ] : string } ;
80
81
requirements : { [ packageName : string ] : string } ;
81
82
migrations ?: string ;
82
83
}
@@ -88,9 +89,9 @@ function _updatePeerVersion(infoMap: Map<string, PackageInfo>, name: string, ran
88
89
return range ;
89
90
}
90
91
if ( maybePackageInfo . target ) {
91
- name = maybePackageInfo . target . updateMetadata . packageGroup [ 0 ] || name ;
92
+ name = maybePackageInfo . target . updateMetadata . packageGroupName || name ;
92
93
} else {
93
- name = maybePackageInfo . installed . updateMetadata . packageGroup [ 0 ] || name ;
94
+ name = maybePackageInfo . installed . updateMetadata . packageGroupName || name ;
94
95
}
95
96
96
97
const maybeTransform = peerCompatibleWhitelist [ name ] ;
@@ -353,7 +354,7 @@ function _getUpdateMetadata(
353
354
const metadata = packageJson [ 'ng-update' ] ;
354
355
355
356
const result : UpdateMetadata = {
356
- packageGroup : [ ] ,
357
+ packageGroup : { } ,
357
358
requirements : { } ,
358
359
} ;
359
360
@@ -363,15 +364,28 @@ function _getUpdateMetadata(
363
364
364
365
if ( metadata [ 'packageGroup' ] ) {
365
366
const packageGroup = metadata [ 'packageGroup' ] ;
366
- // Verify that packageGroup is an array of strings. This is not an error but we still warn
367
- // the user and ignore the packageGroup keys.
368
- if ( ! Array . isArray ( packageGroup ) || packageGroup . some ( x => typeof x != 'string' ) ) {
367
+ // Verify that packageGroup is an array of strings or an map of versions. This is not an error
368
+ // but we still warn the user and ignore the packageGroup keys.
369
+ if ( Array . isArray ( packageGroup ) && packageGroup . every ( x => typeof x == 'string' ) ) {
370
+ result . packageGroup = packageGroup . reduce ( ( group , name ) => {
371
+ group [ name ] = packageJson . version ;
372
+
373
+ return group ;
374
+ } , result . packageGroup ) ;
375
+ } else if ( typeof packageGroup == 'object' && packageGroup
376
+ && Object . values ( packageGroup ) . every ( x => typeof x == 'string' ) ) {
377
+ result . packageGroup = packageGroup ;
378
+ } else {
369
379
logger . warn (
370
380
`packageGroup metadata of package ${ packageJson . name } is malformed. Ignoring.` ,
371
381
) ;
372
- } else {
373
- result . packageGroup = packageGroup ;
374
382
}
383
+
384
+ result . packageGroupName = Object . keys ( result . packageGroup ) [ 0 ] ;
385
+ }
386
+
387
+ if ( typeof metadata [ 'packageGroupName' ] == 'string' ) {
388
+ result . packageGroupName = metadata [ 'packageGroupName' ] ;
375
389
}
376
390
377
391
if ( metadata [ 'requirements' ] ) {
@@ -654,22 +668,34 @@ function _addPackageGroup(
654
668
return ;
655
669
}
656
670
657
- const packageGroup = ngUpdateMetadata [ 'packageGroup' ] ;
671
+ let packageGroup = ngUpdateMetadata [ 'packageGroup' ] ;
658
672
if ( ! packageGroup ) {
659
673
return ;
660
674
}
661
- if ( ! Array . isArray ( packageGroup ) || packageGroup . some ( x => typeof x != 'string' ) ) {
675
+ if ( Array . isArray ( packageGroup ) && ! packageGroup . some ( x => typeof x != 'string' ) ) {
676
+ packageGroup = packageGroup . reduce ( ( acc , curr ) => {
677
+ acc [ curr ] = maybePackage ;
678
+
679
+ return acc ;
680
+ } , { } as { [ name : string ] : string } ) ;
681
+ }
682
+
683
+ // Only need to check if it's an object because we set it right the time before.
684
+ if ( typeof packageGroup != 'object'
685
+ || packageGroup === null
686
+ || Object . values ( packageGroup ) . some ( v => typeof v != 'string' )
687
+ ) {
662
688
logger . warn ( `packageGroup metadata of package ${ npmPackageJson . name } is malformed.` ) ;
663
689
664
690
return ;
665
691
}
666
692
667
- packageGroup
693
+ Object . keys ( packageGroup )
668
694
. filter ( name => ! packages . has ( name ) ) // Don't override names from the command line.
669
695
. filter ( name => allDependencies . has ( name ) ) // Remove packages that aren't installed.
670
696
. forEach ( name => {
671
- packages . set ( name , maybePackage ) ;
672
- } ) ;
697
+ packages . set ( name , packageGroup [ name ] ) ;
698
+ } ) ;
673
699
}
674
700
675
701
/**
0 commit comments