Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/NpmRegistry.res
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
type response

@send external toJson: response => promise<Js.Json.t> = "json"
@val external fetch: string => promise<response> = "fetch"

let getPackageVersions = async (packageName, range) => {
let result = await fetch(`https://registry.npmjs.org/${packageName}`)

let versions = switch await result->toJson {
| Object(dict) =>
switch dict->Dict.get("versions") {
| Some(Object(dict)) => dict->Dict.keysToArray
| _ => []
}
| _ => []
}

let versions =
versions->Array.filterMap(version =>
version->CompareVersions.satisfies(range) ? Some(version) : None
)

versions->Array.reverse
versions
}
22 changes: 2 additions & 20 deletions src/RescriptVersions.res
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,6 @@ let rescriptCoreVersionRange = ">=1.0.0"

type versions = {rescriptVersion: string, rescriptCoreVersion: string}

let getPackageVersions = async (packageName, range) => {
let {stdout} = await Node.Promisified.ChildProcess.exec(`npm view ${packageName} versions --json`)

let versions = switch JSON.parseExn(stdout) {
| Array(versions) =>
versions->Array.filterMap(json =>
switch json {
| String(version) if version->CompareVersions.satisfies(range) => Some(version)
| _ => None
}
)
| _ => []
}

versions->Array.reverse
versions
}

let getCompatibleRescriptCoreVersions = (~rescriptVersion, ~rescriptCoreVersions) =>
if CompareVersions.compareVersions(rescriptVersion, "11.1.0")->Ordering.isLess {
rescriptCoreVersions->Array.filter(coreVersion =>
Expand All @@ -38,8 +20,8 @@ let promptVersions = async () => {
s->P.Spinner.start("Loading available versions...")

let (rescriptVersions, rescriptCoreVersions) = await Promise.all2((
getPackageVersions("rescript", rescriptVersionRange),
getPackageVersions("@rescript/core", rescriptCoreVersionRange),
NpmRegistry.getPackageVersions("rescript", rescriptVersionRange),
NpmRegistry.getPackageVersions("@rescript/core", rescriptCoreVersionRange),
))

s->P.Spinner.stop("Versions loaded.")
Expand Down