@@ -27,8 +27,6 @@ const {
2727 YARN_CLASSIC
2828} = constants
2929
30- const PNPM_FIELD_NAME = PNPM
31-
3230const depFields = [
3331 'dependencies' ,
3432 'devDependencies' ,
@@ -62,7 +60,7 @@ function getHighestEntryIndex(
6260 return getEntryIndexes ( entries , keys ) . at ( - 1 ) ?? - 1
6361}
6462
65- function updatePkgJson (
63+ function updatePkgJsonField (
6664 editablePkgJson : EditablePackageJson ,
6765 field : string ,
6866 value : any
@@ -71,21 +69,25 @@ function updatePkgJson(
7169 const oldValue = pkgJson [ field ]
7270 if ( oldValue ) {
7371 // The field already exists so we simply update the field value.
74- if ( field === PNPM_FIELD_NAME ) {
72+ if ( field === PNPM ) {
73+ const isPnpmObj = isObject ( oldValue )
7574 if ( hasKeys ( value ) ) {
7675 editablePkgJson . update ( {
7776 [ field ] : {
78- ...( isObject ( oldValue ) ? oldValue : { } ) ,
79- overrides : value
77+ ...( isPnpmObj ? oldValue : { } ) ,
78+ overrides : {
79+ ...( isPnpmObj ? ( oldValue as any ) [ OVERRIDES ] : { } ) ,
80+ ...value
81+ }
8082 }
8183 } )
8284 } else {
8385 // Properties with undefined values are omitted when saved as JSON.
8486 editablePkgJson . update (
85- ( hasKeys ( pkgJson [ field ] )
87+ ( hasKeys ( oldValue )
8688 ? {
8789 [ field ] : {
88- ...( isObject ( oldValue ) ? oldValue : { } ) ,
90+ ...( isPnpmObj ? oldValue : { } ) ,
8991 overrides : undefined
9092 }
9193 }
@@ -103,9 +105,7 @@ function updatePkgJson(
103105 return
104106 }
105107 if (
106- ( field === OVERRIDES ||
107- field === PNPM_FIELD_NAME ||
108- field === RESOLUTIONS ) &&
108+ ( field === OVERRIDES || field === PNPM || field === RESOLUTIONS ) &&
109109 ! hasKeys ( value )
110110 ) {
111111 return
@@ -125,7 +125,7 @@ function updatePkgJson(
125125 } else if ( field === RESOLUTIONS ) {
126126 isPlacingHigher = true
127127 insertIndex = getHighestEntryIndex ( entries , [ ...depFields , OVERRIDES , PNPM ] )
128- } else if ( field === PNPM_FIELD_NAME ) {
128+ } else if ( field === PNPM ) {
129129 insertIndex = getLowestEntryIndex ( entries , [ OVERRIDES , RESOLUTIONS ] )
130130 if ( insertIndex === - 1 ) {
131131 isPlacingHigher = true
@@ -144,38 +144,41 @@ function updatePkgJson(
144144 } else if ( isPlacingHigher ) {
145145 insertIndex += 1
146146 }
147- entries . splice ( insertIndex , 0 , [ field , value ] )
147+ entries . splice ( insertIndex , 0 , [
148+ field ,
149+ field === PNPM ? { [ OVERRIDES ] : value } : value
150+ ] )
148151 editablePkgJson . fromJSON (
149152 `${ JSON . stringify ( Object . fromEntries ( entries ) , null , 2 ) } \n`
150153 )
151154}
152155
153- function updateOverrides (
156+ function updateOverridesField (
154157 editablePkgJson : EditablePackageJson ,
155158 overrides : Overrides
156159) {
157- updatePkgJson ( editablePkgJson , OVERRIDES , overrides )
160+ updatePkgJsonField ( editablePkgJson , OVERRIDES , overrides )
158161}
159162
160- function updateResolutions (
163+ function updateResolutionsField (
161164 editablePkgJson : EditablePackageJson ,
162165 overrides : Overrides
163166) {
164- updatePkgJson ( editablePkgJson , RESOLUTIONS , overrides as PnpmOrYarnOverrides )
167+ updatePkgJsonField ( editablePkgJson , RESOLUTIONS , overrides )
165168}
166169
167- function pnpmUpdatePkgJson (
170+ function updatePnpmField (
168171 editablePkgJson : EditablePackageJson ,
169172 overrides : Overrides
170173) {
171- updatePkgJson ( editablePkgJson , PNPM_FIELD_NAME , overrides )
174+ updatePkgJsonField ( editablePkgJson , PNPM , overrides )
172175}
173176
174177export const updateManifestByAgent = new Map < Agent , AgentModifyManifestFn > ( [
175- [ BUN , updateResolutions ] ,
176- [ NPM , updateOverrides ] ,
177- [ PNPM , pnpmUpdatePkgJson ] ,
178- [ VLT , updateOverrides ] ,
179- [ YARN_BERRY , updateResolutions ] ,
180- [ YARN_CLASSIC , updateResolutions ]
178+ [ BUN , updateResolutionsField ] ,
179+ [ NPM , updateOverridesField ] ,
180+ [ PNPM , updatePnpmField ] ,
181+ [ VLT , updateOverridesField ] ,
182+ [ YARN_BERRY , updateResolutionsField ] ,
183+ [ YARN_CLASSIC , updateResolutionsField ]
181184] )
0 commit comments