Skip to content

Commit 6c403f5

Browse files
committed
Fix pnpm overrides updating
1 parent c06a6e2 commit 6c403f5

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

src/commands/optimize/update-manifest-by-agent.ts

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ const {
2727
YARN_CLASSIC
2828
} = constants
2929

30-
const PNPM_FIELD_NAME = PNPM
31-
3230
const 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

174177
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]
181184
])

0 commit comments

Comments
 (0)