Skip to content

Commit 67a1acc

Browse files
vaadin-botArtur-
andauthored
fix: Make paths work as version numbers in @NpmPackage (#14675) (#14682)
Fixes #14673 Co-authored-by: Artur <artur@vaadin.com>
1 parent 30e23a9 commit 67a1acc

4 files changed

Lines changed: 57 additions & 26 deletions

File tree

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

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,9 @@ int addDependency(JsonObject json, String key, String pkg, String version) {
515515

516516
private boolean isNewerVersion(JsonObject json, String pkg,
517517
String version) {
518-
FrontendVersion newVersion = new FrontendVersion(version);
519518

520519
try {
520+
FrontendVersion newVersion = new FrontendVersion(version);
521521
FrontendVersion existingVersion = toVersion(json, pkg);
522522
return newVersion.isNewerThan(existingVersion);
523523
} catch (NumberFormatException e) {
@@ -539,9 +539,10 @@ private boolean isNewerVersion(JsonObject json, String pkg,
539539
private int handleExistingVaadinDep(JsonObject json, String pkg,
540540
String version, JsonObject vaadinDeps) {
541541
boolean added = false;
542-
FrontendVersion vaadinVersion = toVersion(vaadinDeps, pkg);
543-
if (json.hasKey(pkg)) {
544-
try {
542+
boolean updatedVaadinVersionSection = false;
543+
try {
544+
FrontendVersion vaadinVersion = toVersion(vaadinDeps, pkg);
545+
if (json.hasKey(pkg)) {
545546
FrontendVersion packageVersion = toVersion(json, pkg);
546547
FrontendVersion newVersion = new FrontendVersion(version);
547548
// Vaadin and package.json versions are the same, but dependency
@@ -557,25 +558,28 @@ private int handleExistingVaadinDep(JsonObject json, String pkg,
557558
json.put(pkg, version);
558559
added = true;
559560
}
560-
} catch (NumberFormatException e) { // NOSONAR
561-
/*
562-
* If the current version is not parseable, it can refer to a
563-
* file and we should leave it alone
564-
*/
561+
} else {
562+
json.put(pkg, version);
563+
added = true;
565564
}
566-
} else {
567-
json.put(pkg, version);
568-
added = true;
565+
} catch (NumberFormatException e) { // NOSONAR
566+
/*
567+
* If the current version is not parseable, it can refer to a file
568+
* and we should leave it alone
569+
*/
569570
}
570571
// always update vaadin version to the latest set version
571-
vaadinDeps.put(pkg, version);
572+
if (!version.equals(vaadinDeps.getString(pkg))) {
573+
vaadinDeps.put(pkg, version);
574+
updatedVaadinVersionSection = true;
575+
}
572576

573577
if (added) {
574578
log().debug("Added \"{}\": \"{}\" line.", pkg, version);
575579
} else {
576580
// we made a change to the package json vaadin defaults
577581
// even if we didn't add to the dependencies.
578-
added = !vaadinVersion.isEqualTo(new FrontendVersion(version));
582+
added = updatedVaadinVersionSection;
579583
}
580584
return added ? 1 : 0;
581585
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,12 @@ private boolean shouldLockDependencyVersion(String dependency,
170170
}
171171

172172
if (projectDependencies.hasKey(dependency)) {
173+
try {
174+
new FrontendVersion(projectDependencies.getString(dependency));
175+
} catch (Exception e) {
176+
// Do not lock non-numeric versions, e.g. folder references
177+
return false;
178+
}
173179
return true;
174180
}
175181

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -249,27 +249,25 @@ public void shouldSkipUpdatingNonParsableVersions() throws IOException {
249249
}
250250

251251
@Test
252-
public void shouldThrowExceptionOnNewVersionNonParsable() {
252+
public void canUpdateNonParseableVersions() throws IOException {
253253
JsonObject packageJson = Json.createObject();
254254
JsonObject dependencies = Json.createObject();
255255
packageJson.put(NodeUpdater.DEPENDENCIES, dependencies);
256256
JsonObject vaadinDependencies = Json.createObject();
257257
vaadinDependencies.put(NodeUpdater.DEPENDENCIES, Json.createObject());
258258
packageJson.put(NodeUpdater.VAADIN_DEP_KEY, vaadinDependencies);
259259

260-
String formPackage = "@vaadin/form";
261-
String existingVersion = "2.0.0";
262-
String newVersion = "../../../some/local/path";
260+
String pkg = "mypackage";
261+
String existingVersion = "./some/path";
263262

264-
dependencies.put(formPackage, existingVersion);
263+
dependencies.put(pkg, existingVersion);
264+
265+
nodeUpdater.addDependency(packageJson, NodeUpdater.DEPENDENCIES, pkg,
266+
existingVersion);
267+
268+
Assert.assertEquals(existingVersion,
269+
packageJson.getObject(NodeUpdater.DEPENDENCIES).getString(pkg));
265270

266-
NumberFormatException expectedException = Assert
267-
.assertThrows(NumberFormatException.class,
268-
() -> nodeUpdater.addDependency(packageJson,
269-
NodeUpdater.DEPENDENCIES, formPackage,
270-
newVersion));
271-
Assert.assertTrue(expectedException.getMessage()
272-
.contains("is not a valid version"));
273271
}
274272

275273
@Test

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,29 @@ public void npmIsInUse_versionsJsonContainsSameVersions_nothingIsModified()
525525
task.modified);
526526
}
527527

528+
@Test
529+
public void nonNumericVersionsNotPinned() throws IOException {
530+
final JsonObject packageJson = getOrCreatePackageJson();
531+
createBasicVaadinVersionsJson();
532+
JsonObject dependencies = packageJson.getObject(DEPENDENCIES);
533+
dependencies.put("localdep", "./localdeps/localdep");
534+
File file = new File(npmFolder, PACKAGE_JSON);
535+
FileUtils.writeStringToFile(file, packageJson.toJson(),
536+
StandardCharsets.UTF_8);
537+
538+
Assert.assertFalse(packageJson.hasKey("overrides")
539+
&& packageJson.getObject("overrides").hasKey("localdep"));
540+
541+
final TaskUpdatePackages task = createTask(
542+
createApplicationDependencies());
543+
task.execute();
544+
545+
final JsonObject newPackageJson = getOrCreatePackageJson();
546+
547+
Assert.assertFalse(newPackageJson.hasKey("overrides")
548+
&& newPackageJson.getObject("overrides").hasKey("localdep"));
549+
}
550+
528551
private void createBasicVaadinVersionsJson() {
529552
createVaadinVersionsJson(PLATFORM_DIALOG_VERSION,
530553
PLATFORM_ELEMENT_MIXIN_VERSION, PLATFORM_OVERLAY_VERSION);

0 commit comments

Comments
 (0)