@@ -23,6 +23,7 @@ import { VariantsAspect } from '@teambit/variants';
2323import type { Component } from '@teambit/component' ;
2424import { ComponentID , ComponentMap } from '@teambit/component' ;
2525import { PackageJsonFile } from '@teambit/component.sources' ;
26+ import { type EnvJsonc } from '@teambit/envs'
2627import { updateJsoncPreservingFormatting } from '@teambit/toolbox.json.jsonc-utils' ;
2728import { createLinks } from '@teambit/dependencies.fs.linked-dependencies' ;
2829import pMapSeries from 'p-map-series' ;
@@ -1010,44 +1011,54 @@ export class InstallMain {
10101011 }
10111012
10121013 async updateEnvJsoncPolicies ( outdatedPkgs : MergedOutdatedPkg [ ] ) {
1013- const updatesByComponentId = groupBy ( outdatedPkgs , ( pkg ) => pkg . componentId ?. toString ( ) ) ;
1014+ // Group packages by componentId, skipping those without one
1015+ const updatesByComponentId = new Map < string , MergedOutdatedPkg [ ] > ( ) ;
1016+ for ( const pkg of outdatedPkgs ) {
1017+ if ( ! pkg . componentId ) continue ;
1018+ const key = pkg . componentId . toString ( ) ;
1019+ const existing = updatesByComponentId . get ( key ) ;
1020+ if ( existing ) {
1021+ existing . push ( pkg ) ;
1022+ } else {
1023+ updatesByComponentId . set ( key , [ pkg ] ) ;
1024+ }
1025+ }
10141026
1015- await pMapSeries ( Object . entries ( updatesByComponentId ) , async ( [ componentIdStr , pkgs ] ) => {
1016- const componentId = await this . workspace . resolveComponentId ( componentIdStr ) ;
1027+ await Promise . all ( Array . from ( updatesByComponentId . values ( ) ) . map ( async ( pkgs ) => {
1028+ const componentId = pkgs [ 0 ] . componentId ! ;
10171029 const component = await this . workspace . get ( componentId ) ;
10181030 const envJsoncFile = component . filesystem . files . find ( ( file ) => file . relative === 'env.jsonc' ) ;
10191031 if ( ! envJsoncFile ) return ;
10201032
10211033 const envJsoncContent = envJsoncFile . contents . toString ( ) ;
1022- const updatedContent = updateJsoncPreservingFormatting ( envJsoncContent , ( envJsonc ) => {
1034+ const updatedContent = updateJsoncPreservingFormatting ( envJsoncContent , ( envJsonc : EnvJsonc ) : EnvJsonc => {
10231035 pkgs . forEach ( ( pkg ) => {
1024- let field : string | undefined ;
1025- if ( pkg . targetField === 'devDependencies' ) field = 'dev' ;
1026- if ( pkg . targetField === 'dependencies' ) field = 'runtime' ;
1027- if ( pkg . targetField === 'peerDependencies' ) field = 'peers' ;
1028-
1029- if ( ! field ) return ;
1030-
1031- // @ts -ignore
1032- const deps = envJsonc . policy ?. [ field ] ;
1033- if ( ! Array . isArray ( deps ) ) return ;
1034-
1035- const depEntry = deps . find ( ( d : any ) => d . name === pkg . name ) ;
1036- if ( depEntry ) {
1037- depEntry . version = pkg . latestRange ;
1038- if ( field === 'peers' && depEntry . supportedRange ) {
1039- if ( ! semver . intersects ( pkg . latestRange , depEntry . supportedRange ) ) {
1040- depEntry . supportedRange = ` ${ depEntry . supportedRange } || ${ pkg . latestRange } ` ;
1036+ let field : string | undefined ;
1037+ if ( pkg . targetField === 'devDependencies' ) field = 'dev' ;
1038+ if ( pkg . targetField === 'dependencies' ) field = 'runtime' ;
1039+ if ( pkg . targetField === 'peerDependencies' ) field = 'peers' ;
1040+
1041+ if ( ! field ) return ;
1042+
1043+ const deps = envJsonc . policy ?. [ field ] ;
1044+ if ( ! Array . isArray ( deps ) ) return ;
1045+
1046+ const depEntry = deps . find ( ( { name } ) => name === pkg . name ) ;
1047+ if ( depEntry ) {
1048+ depEntry . version = pkg . latestRange ;
1049+ if ( field === 'peers' && depEntry . supportedRange ) {
1050+ if ( ! semver . intersects ( pkg . latestRange , depEntry . supportedRange ) ) {
1051+ depEntry . supportedRange = ` ${ depEntry . supportedRange } || ${ pkg . latestRange } ` ;
1052+ }
10411053 }
10421054 }
1043- }
10441055 } ) ;
10451056 return envJsonc ;
10461057 } ) ;
10471058
10481059 const absPath = path . join ( this . workspace . componentDir ( component . id ) , 'env.jsonc' ) ;
10491060 await fs . writeFile ( absPath , updatedContent ) ;
1050- } ) ;
1061+ } ) ) ;
10511062 }
10521063
10531064 private async _getAllUsedEnvIds ( ) : Promise < ComponentID [ ] > {
0 commit comments