Skip to content

Commit 89e34cd

Browse files
platoshaZheSun88
authored andcommitted
fix: respect user opt-out when adding overrides (#24123)
Adjust the checks for user opt-out in package.json overrides, so that an existing override for new entries added by Vaadin is considered as an opt-out, so that the existing user value is kept. This behavior satisfies the previously existing `NodeUpdatePackagesNpmVersionLockingTest.shouldNotUpdatesOverrides_whenHasUserModification` test.
1 parent fa3185e commit 89e34cd

3 files changed

Lines changed: 26 additions & 14 deletions

File tree

flow-server/src/main/java/com/vaadin/flow/server/frontend/TaskUpdatePackages.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -189,25 +189,31 @@ boolean lockVersionForNpm(ObjectNode packageJson) throws IOException {
189189
// Override value didn't change, skipping.
190190
continue;
191191
}
192+
final JsonNode lastUserValue;
193+
final List<String> keyPath = List
194+
.of(entryToUpdate.getKey().split(">"));
195+
if (enablePnpm) {
196+
lastUserValue = overridesSection.get(entryToUpdate.getKey());
197+
} else {
198+
lastUserValue = JacksonUtils.getNestedKey(overridesSection,
199+
keyPath);
200+
}
201+
boolean optOut = !Objects.equals(StringNode.valueOf(lastValue),
202+
lastUserValue);
203+
if (optOut) {
204+
// Actual override value is different from last Vaadin override:
205+
// assume user opt-out and skip.
206+
continue;
207+
}
192208
versionLockingUpdated = true;
193209
if (enablePnpm) {
194210
// Use flat format for pnpm
195211
overridesSection.put(entryToUpdate.getKey(),
196212
entryToUpdate.getValue());
197-
continue;
198-
}
199-
// Handle possibly nested overrides object
200-
final List<String> keyPath = List
201-
.of(entryToUpdate.getKey().split(">"));
202-
final JsonNode lastValueNode = StringNode.valueOf(lastValue);
203-
if (lastValueNode != null && !lastValueNode.equals(
204-
JacksonUtils.getNestedKey(overridesSection, keyPath))) {
205-
// Actual override value is different from last Vaadin override:
206-
// assume opt-out and skip.
207-
continue;
213+
} else {
214+
putNestedOverride(overridesSection, keyPath,
215+
entryToUpdate.getValue());
208216
}
209-
putNestedOverride(overridesSection, keyPath,
210-
entryToUpdate.getValue());
211217
}
212218
for (final Map.Entry<String, String> entryToRemove : flatLastVaadinOverrides
213219
.entrySet()) {

flow-server/src/test/java/com/vaadin/flow/server/frontend/NodeUpdatePackagesNpmVersionLockingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public void shouldHandleNestedObjectOverrides_withoutError()
194194
packageUpdater.lockVersionForNpm(packageJson);
195195

196196
// Verify flat override stays flat
197-
JsonNode overrides = packageJson.get(PNPM).get(OVERRIDES);
197+
JsonNode overrides = packageJson.get(OVERRIDES);
198198
assertTrue("Flat override should remain unchanged",
199199
overrides.has("flat-dep"));
200200
assertEquals("3.0.0", overrides.get("flat-dep").stringValue());

flow-server/src/test/java/com/vaadin/flow/server/frontend/TaskUpdatePackagesNpmTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.slf4j.LoggerFactory;
4242
import tools.jackson.databind.JsonNode;
4343
import tools.jackson.databind.node.ObjectNode;
44+
import tools.jackson.databind.node.StringNode;
4445

4546
import com.vaadin.flow.internal.JacksonUtils;
4647
import com.vaadin.flow.server.Constants;
@@ -238,6 +239,11 @@ public void overridesContainPinnedVersion_platformVersionUpdatedToNewerWhileDepe
238239
ObjectNode packageJson = getOrCreatePackageJson();
239240
packageJson.set(OVERRIDES, JacksonUtils.createObjectNode());
240241
((ObjectNode) packageJson.get(OVERRIDES)).put("@vaadin/aura", "1.0");
242+
// Assuming Vaadin added the override, set Vaadin overrides accordingly
243+
JacksonUtils.setNestedKey(packageJson,
244+
List.of(VAADIN_DEP_KEY, OVERRIDES, "@vaadin/aura"),
245+
StringNode.valueOf("1.0"),
246+
(nonObjectNode) -> JacksonUtils.createObjectNode());
241247

242248
FileUtils.writeStringToFile(new File(npmFolder, PACKAGE_JSON),
243249
packageJson.toPrettyString(), StandardCharsets.UTF_8);

0 commit comments

Comments
 (0)