1
1
module P = ClackPrompts
2
2
3
- let rescriptVersionRange = "11.x.x"
3
+ let rescript12VersionRange = ">=12.0.0-alpha.5"
4
+ let rescriptVersionRange = ` 11.x.x || ${rescript12VersionRange}`
4
5
let rescriptCoreVersionRange = ">=1.0.0"
5
6
6
- type versions = {rescriptVersion : string , rescriptCoreVersion : string }
7
+ type versions = {rescriptVersion : string , rescriptCoreVersion : option < string > }
7
8
8
9
let getCompatibleRescriptCoreVersions = (~rescriptVersion , ~rescriptCoreVersions ) =>
9
10
if CompareVersions .compareVersions (rescriptVersion , "11.1.0" )-> Ordering .isLess {
@@ -34,10 +35,14 @@ let promptVersions = async () => {
34
35
let rescriptVersion = switch rescriptVersionsResult {
35
36
| Ok ([version ]) => version
36
37
| 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
41
46
| Error (error ) => error -> NpmRegistry .getFetchErrorMessage -> Error .make -> Error .raise
42
47
}
43
48
@@ -51,21 +56,31 @@ let promptVersions = async () => {
51
56
~rescriptCoreVersions ,
52
57
)
53
58
59
+ let isRescript12 = CompareVersions .satisfies (rescriptVersion , rescript12VersionRange )
60
+
54
61
let rescriptCoreVersion = switch rescriptCoreVersions {
55
- | [version ] => version
62
+ | _ if isRescript12 => None
63
+ | [version ] => Some (version )
56
64
| _ =>
57
- await P .select ({
65
+ let version = await P .select ({
58
66
message : "ReScript Core version?" ,
59
67
options : rescriptCoreVersions -> Array .map (v => {P .value : v }),
60
68
})-> P .resultOrRaise
69
+ Some (version )
61
70
}
62
71
63
72
{rescriptVersion , rescriptCoreVersion }
64
73
}
65
74
66
75
let installVersions = async ({rescriptVersion , rescriptCoreVersion }) => {
67
76
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
+ }
69
84
70
85
// #58: Windows: packageManager may be something like
71
86
// "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js".
0 commit comments