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

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);
};