Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

‎src/ExistingJsProject.res

Lines changed: 6 additions & 2 deletions
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)

‎src/NewProject.res

Lines changed: 5 additions & 1 deletion
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({

‎src/RescriptJsonUtils.res

Lines changed: 29 additions & 0 deletions
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+
}

‎src/RescriptVersions.res

Lines changed: 24 additions & 9 deletions
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+
letversion=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".

‎src/RescriptVersions.resi

Lines changed: 1 addition & 1 deletion
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

‎src/bindings/ClackPrompts.res

Lines changed: 1 addition & 0 deletions
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")

‎templates/rescript-template-basic/package.json

Lines changed: 1 addition & 4 deletions
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
}

‎templates/rescript-template-nextjs/package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
"author": "Patrick Ecker <ryyppy@users.noreply.github.com>",
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": {

‎templates/rescript-template-vite/package.json

Lines changed: 1 addition & 3 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /