Skip to content

Commit ab218f5

Browse files
author
Akos Kitta
committed
Coerce a semver when calculating updatables.
Closes #1390 Signed-off-by: Akos Kitta <[email protected]>
1 parent 20cc34c commit ab218f5

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

Diff for: arduino-ide-extension/src/common/protocol/installable.ts

+20-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,25 @@ export namespace Installable {
2727
export namespace Version {
2828
/**
2929
* Most recent version comes first, then the previous versions. (`1.8.1`, `1.6.3`, `1.6.2`, `1.6.1` and so on.)
30+
*
31+
* If `coerce` is `true` tries to convert any invalid semver strings to a valid semver based on [these](https://github.com/npm/node-semver#coercion) rules.
3032
*/
31-
export const COMPARATOR = (left: Version, right: Version): number => {
32-
if (semver.valid(left) && semver.valid(right)) {
33-
return semver.compare(left, right);
33+
export const COMPARATOR = (
34+
left: Version,
35+
right: Version,
36+
coerce = false
37+
): number => {
38+
const validLeft = semver.parse(left);
39+
const validRight = semver.parse(right);
40+
if (validLeft && validRight) {
41+
return semver.compare(validLeft, validRight);
42+
}
43+
if (coerce) {
44+
const coercedLeft = validLeft ?? semver.coerce(left);
45+
const coercedRight = validRight ?? semver.coerce(right);
46+
if (coercedLeft && coercedRight) {
47+
return semver.compare(coercedLeft, coercedRight);
48+
}
3449
}
3550
return naturalCompare(left, right);
3651
};
@@ -56,7 +71,8 @@ export namespace Installable {
5671
}
5772
const result = Installable.Version.COMPARATOR(
5873
latestVersion,
59-
installedVersion
74+
installedVersion,
75+
true
6076
);
6177
return result > 0;
6278
};

0 commit comments

Comments
 (0)