@@ -27,8 +27,6 @@ const {
27
27
YARN_CLASSIC
28
28
} = constants
29
29
30
- const PNPM_FIELD_NAME = PNPM
31
-
32
30
const depFields = [
33
31
'dependencies' ,
34
32
'devDependencies' ,
@@ -62,7 +60,7 @@ function getHighestEntryIndex(
62
60
return getEntryIndexes ( entries , keys ) . at ( - 1 ) ?? - 1
63
61
}
64
62
65
- function updatePkgJson (
63
+ function updatePkgJsonField (
66
64
editablePkgJson : EditablePackageJson ,
67
65
field : string ,
68
66
value : any
@@ -71,21 +69,25 @@ function updatePkgJson(
71
69
const oldValue = pkgJson [ field ]
72
70
if ( oldValue ) {
73
71
// 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 )
75
74
if ( hasKeys ( value ) ) {
76
75
editablePkgJson . update ( {
77
76
[ field ] : {
78
- ...( isObject ( oldValue ) ? oldValue : { } ) ,
79
- overrides : value
77
+ ...( isPnpmObj ? oldValue : { } ) ,
78
+ overrides : {
79
+ ...( isPnpmObj ? ( oldValue as any ) [ OVERRIDES ] : { } ) ,
80
+ ...value
81
+ }
80
82
}
81
83
} )
82
84
} else {
83
85
// Properties with undefined values are omitted when saved as JSON.
84
86
editablePkgJson . update (
85
- ( hasKeys ( pkgJson [ field ] )
87
+ ( hasKeys ( oldValue )
86
88
? {
87
89
[ field ] : {
88
- ...( isObject ( oldValue ) ? oldValue : { } ) ,
90
+ ...( isPnpmObj ? oldValue : { } ) ,
89
91
overrides : undefined
90
92
}
91
93
}
@@ -103,9 +105,7 @@ function updatePkgJson(
103
105
return
104
106
}
105
107
if (
106
- ( field === OVERRIDES ||
107
- field === PNPM_FIELD_NAME ||
108
- field === RESOLUTIONS ) &&
108
+ ( field === OVERRIDES || field === PNPM || field === RESOLUTIONS ) &&
109
109
! hasKeys ( value )
110
110
) {
111
111
return
@@ -125,7 +125,7 @@ function updatePkgJson(
125
125
} else if ( field === RESOLUTIONS ) {
126
126
isPlacingHigher = true
127
127
insertIndex = getHighestEntryIndex ( entries , [ ...depFields , OVERRIDES , PNPM ] )
128
- } else if ( field === PNPM_FIELD_NAME ) {
128
+ } else if ( field === PNPM ) {
129
129
insertIndex = getLowestEntryIndex ( entries , [ OVERRIDES , RESOLUTIONS ] )
130
130
if ( insertIndex === - 1 ) {
131
131
isPlacingHigher = true
@@ -144,38 +144,41 @@ function updatePkgJson(
144
144
} else if ( isPlacingHigher ) {
145
145
insertIndex += 1
146
146
}
147
- entries . splice ( insertIndex , 0 , [ field , value ] )
147
+ entries . splice ( insertIndex , 0 , [
148
+ field ,
149
+ field === PNPM ? { [ OVERRIDES ] : value } : value
150
+ ] )
148
151
editablePkgJson . fromJSON (
149
152
`${ JSON . stringify ( Object . fromEntries ( entries ) , null , 2 ) } \n`
150
153
)
151
154
}
152
155
153
- function updateOverrides (
156
+ function updateOverridesField (
154
157
editablePkgJson : EditablePackageJson ,
155
158
overrides : Overrides
156
159
) {
157
- updatePkgJson ( editablePkgJson , OVERRIDES , overrides )
160
+ updatePkgJsonField ( editablePkgJson , OVERRIDES , overrides )
158
161
}
159
162
160
- function updateResolutions (
163
+ function updateResolutionsField (
161
164
editablePkgJson : EditablePackageJson ,
162
165
overrides : Overrides
163
166
) {
164
- updatePkgJson ( editablePkgJson , RESOLUTIONS , overrides as PnpmOrYarnOverrides )
167
+ updatePkgJsonField ( editablePkgJson , RESOLUTIONS , overrides )
165
168
}
166
169
167
- function pnpmUpdatePkgJson (
170
+ function updatePnpmField (
168
171
editablePkgJson : EditablePackageJson ,
169
172
overrides : Overrides
170
173
) {
171
- updatePkgJson ( editablePkgJson , PNPM_FIELD_NAME , overrides )
174
+ updatePkgJsonField ( editablePkgJson , PNPM , overrides )
172
175
}
173
176
174
177
export 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 ]
181
184
] )
0 commit comments