11module P = ClackPrompts
22
3- let rescriptVersionRange = "11.x.x"
3+ let rescript12VersionRange = ">=12.0.0-alpha.5"
4+ let rescriptVersionRange = ` 11.x.x || ${rescript12VersionRange}`
45let rescriptCoreVersionRange = ">=1.0.0"
56
6- type versions = {rescriptVersion : string , rescriptCoreVersion : string }
7+ type versions = {rescriptVersion : string , rescriptCoreVersion : option < string > }
78
89let getCompatibleRescriptCoreVersions = (~rescriptVersion , ~rescriptCoreVersions ) =>
910 if CompareVersions .compareVersions (rescriptVersion , "11.1.0" )-> Ordering .isLess {
@@ -34,10 +35,14 @@ let promptVersions = async () => {
3435 let rescriptVersion = switch rescriptVersionsResult {
3536 | Ok ([version ]) => version
3637 | Ok (rescriptVersions ) =>
37- await P .select ({
38- message : "ReScript version?" ,
39- options : rescriptVersions -> Array .map (v => {P .value : v }),
40- })-> P .resultOrRaise
38+ let options = rescriptVersions -> Array .map (v => {P .value : v })
39+
40+ let initialValue =
41+ options -> Array .find (o => o .value -> String .startsWith ("11." ))-> Option .map (o => o .value )
42+
43+ let selectOptions = {ClackPrompts .message : "ReScript version?" , options , ?initialValue }
44+
45+ await P .select (selectOptions )-> P .resultOrRaise
4146 | Error (error ) => error -> NpmRegistry .getFetchErrorMessage -> Error .make -> Error .raise
4247 }
4348
@@ -51,21 +56,31 @@ let promptVersions = async () => {
5156 ~rescriptCoreVersions ,
5257 )
5358
59+ let isRescript12 = CompareVersions .satisfies (rescriptVersion , rescript12VersionRange )
60+
5461 let rescriptCoreVersion = switch rescriptCoreVersions {
55- | [version ] => version
62+ | _ if isRescript12 => None
63+ | [version ] => Some (version )
5664 | _ =>
57- await P .select ({
65+ let version = await P .select ({
5866 message : "ReScript Core version?" ,
5967 options : rescriptCoreVersions -> Array .map (v => {P .value : v }),
6068 })-> P .resultOrRaise
69+ Some (version )
6170 }
6271
6372 {rescriptVersion , rescriptCoreVersion }
6473}
6574
6675let installVersions = async ({rescriptVersion , rescriptCoreVersion }) => {
6776 let packageManager = PackageManagers .getActivePackageManager ()
68- let packages = [` rescript@${rescriptVersion}` , ` @rescript/core@${rescriptCoreVersion}` ]
77+ let packages = switch rescriptCoreVersion {
78+ | Some (rescriptCoreVersion ) => [
79+ ` rescript@${rescriptVersion}` ,
80+ ` @rescript/core@${rescriptCoreVersion}` ,
81+ ]
82+ | None => [` rescript@${rescriptVersion}` ]
83+ }
6984
7085 // #58: Windows: packageManager may be something like
7186 // "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js".
0 commit comments