You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
exception Version_Not_Installed(string); |
|
|
|
/** Parse a local version, including lts and aliases */ |
|
let getVersion = version => { |
|
let%lwt parsed = Versions.parse(version); |
|
let%lwt resultWithLts = |
|
switch (parsed) { |
|
| Ok(x) => Lwt.return_ok(x) |
|
| Error("latest-*") => |
|
switch%lwt (VersionListingLts.getLatest()) { |
|
| Error(_) => Lwt.return_error(Version_Not_Installed(version)) |
|
| Ok({VersionListingLts.lts, _}) => |
|
Versions.Alias("latest-" ++ lts) |> Lwt.return_ok |
|
} |
|
| _ => Version_Not_Installed(version) |> Lwt.return_error |
|
}; |
|
resultWithLts |> Result.fold(Lwt.fail, Lwt.return); |
|
}; |
|
|
|
/** |
|
* Get matches for all versions that match a semver partial |
|
*/ |
|
let getMatchingLocalVersions = version => { |
|
open Versions.Local; |
|
|
|
let%lwt installedVersions = Versions.getInstalledVersions(); |
|
let formattedVersionName = Versions.format(version); |
|
|
|
let matchingVersions = |
|
installedVersions |
|
|> List.filter(v => |
|
Versions.isVersionFitsPrefix(formattedVersionName, v.name) |
|
|| v.name == formattedVersionName |
|
|| List.exists(alias => alias == formattedVersionName, v.aliases) |
|
) |
|
|> List.sort((a, b) => - compare(a.name, b.name)); |
|
|
|
Lwt.return(matchingVersions); |
|
};
|
|
|