Skip to content

Commit 5ddbb65

Browse files
authored
Add support v12 alpha (#76)
* Detect v12 and make rescript core optional * Remove rescript packages from templates * Update rescript.json * Select v11 by default * Fix prompt binding * Remove switch
1 parent 2d95888 commit 5ddbb65

File tree

9 files changed

+69
-23
lines changed

9 files changed

+69
-23
lines changed

Diff for: src/ExistingJsProject.res

+6-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ let updatePackageJson = async () =>
2020
}
2121
)
2222

23-
let updateRescriptJson = async (~projectName, ~sourceDir, ~moduleSystem, ~suffix) =>
23+
let updateRescriptJson = async (~projectName, ~sourceDir, ~moduleSystem, ~suffix, ~versions) =>
2424
await JsonUtils.updateJsonFile("rescript.json", json =>
2525
switch json {
2626
| Object(config) =>
@@ -34,6 +34,10 @@ let updateRescriptJson = async (~projectName, ~sourceDir, ~moduleSystem, ~suffix
3434
| Some(Object(sources)) => sources->Dict.set("module", String(moduleSystem))
3535
| _ => ()
3636
}
37+
38+
if Option.isNone(versions.RescriptVersions.rescriptCoreVersion) {
39+
RescriptJsonUtils.removeRescriptCore(config)
40+
}
3741
| _ => ()
3842
}
3943
)
@@ -98,7 +102,7 @@ let addToExistingProject = async (~projectName) => {
98102
}
99103

100104
await updatePackageJson()
101-
await updateRescriptJson(~projectName, ~sourceDir, ~moduleSystem, ~suffix)
105+
await updateRescriptJson(~projectName, ~sourceDir, ~moduleSystem, ~suffix, ~versions)
102106

103107
if !Fs.existsSync(sourceDirPath) {
104108
await Fs.Promises.mkdir(sourceDirPath)

Diff for: src/NewProject.res

+5-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ let updateRescriptJson = async (~projectName, ~versions) =>
3737
config->Dict.set("suffix", String(suffix))
3838
| _ => ()
3939
}
40+
41+
if Option.isNone(versions.rescriptCoreVersion) {
42+
RescriptJsonUtils.removeRescriptCore(config)
43+
}
4044
| _ => ()
4145
}
4246
)
@@ -84,7 +88,7 @@ let createNewProject = async () => {
8488
await createProject(
8589
~templateName="rescript-template-basic",
8690
~projectName="test",
87-
~versions={rescriptVersion: "11.1.1", rescriptCoreVersion: "1.5.0"},
91+
~versions={rescriptVersion: "11.1.1", rescriptCoreVersion: Some("1.5.0")},
8892
)
8993
} else {
9094
let projectName = await P.text({

Diff for: src/RescriptJsonUtils.res

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
let removeRescriptCore = (config: Dict.t<JSON.t>) => {
2+
// Remove @rescript/core from bs-dependencies if the version is not set.
3+
switch config->Dict.get("bs-dependencies") {
4+
| Some(Array(dependencies)) => {
5+
let newDependencies = dependencies->Array.filter(dependency =>
6+
switch dependency {
7+
| String("@rescript/core") => false
8+
| _ => true
9+
}
10+
)
11+
config->Dict.set("bs-dependencies", Array(newDependencies))
12+
}
13+
| _ => ()
14+
}
15+
16+
// Remove "-open RescriptCore" from bsc-flags if the version is not set.
17+
switch config->Dict.get("bsc-flags") {
18+
| Some(Array(flags)) => {
19+
let newFlags = flags->Array.filter(flag =>
20+
switch flag {
21+
| String("-open RescriptCore") => false
22+
| _ => true
23+
}
24+
)
25+
config->Dict.set("bsc-flags", Array(newFlags))
26+
}
27+
| _ => ()
28+
}
29+
}

Diff for: src/RescriptVersions.res

+24-9
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
module P = ClackPrompts
22

3-
let rescriptVersionRange = "11.x.x"
3+
let rescript12VersionRange = ">=12.0.0-alpha.5"
4+
let rescriptVersionRange = `11.x.x || ${rescript12VersionRange}`
45
let rescriptCoreVersionRange = ">=1.0.0"
56

6-
type versions = {rescriptVersion: string, rescriptCoreVersion: string}
7+
type versions = {rescriptVersion: string, rescriptCoreVersion: option<string>}
78

89
let 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

6675
let 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".

Diff for: src/RescriptVersions.resi

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
type versions = {rescriptVersion: string, rescriptCoreVersion: string}
1+
type versions = {rescriptVersion: string, rescriptCoreVersion: option<string>}
22

33
let promptVersions: unit => promise<versions>
44

Diff for: src/bindings/ClackPrompts.res

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type selectOption = {
3838
type selectOptions = {
3939
message: string,
4040
options: array<selectOption>,
41+
initialValue?: string,
4142
}
4243

4344
@module("@clack/prompts")

Diff for: templates/rescript-template-basic/package.json

+1-4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,5 @@
1111
],
1212
"author": "",
1313
"license": "MIT",
14-
"dependencies": {
15-
"@rescript/core": "^1.3.0",
16-
"rescript": "^11.1.0"
17-
}
14+
"dependencies": {}
1815
}

Diff for: templates/rescript-template-nextjs/package.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
"author": "Patrick Ecker <[email protected]>",
55
"license": "Apache-2.0",
66
"dependencies": {
7-
"@rescript/core": "^1.3.0",
87
"@rescript/react": "^0.12.1",
98
"next": "^14.0.4",
109
"react": "^18.2.0",
11-
"react-dom": "^18.2.0",
12-
"rescript": "^11.1.0"
10+
"react-dom": "^18.2.0"
1311
},
1412
"repository": "https://github.com/rescript-lang/create-rescript-app",
1513
"scripts": {

Diff for: templates/rescript-template-vite/package.json

+1-3
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@
1212
"preview": "vite preview"
1313
},
1414
"dependencies": {
15-
"@rescript/core": "^1.3.0",
1615
"@rescript/react": "^0.12.1",
1716
"react": "^18.2.0",
18-
"react-dom": "^18.2.0",
19-
"rescript": "^11.1.0"
17+
"react-dom": "^18.2.0"
2018
},
2119
"devDependencies": {
2220
"@vitejs/plugin-react": "^4.2.1",

0 commit comments

Comments
 (0)