diff --git a/src/ExistingJsProject.res b/src/ExistingJsProject.res index f65e764..5bb70e4 100644 --- a/src/ExistingJsProject.res +++ b/src/ExistingJsProject.res @@ -2,7 +2,7 @@ open Node module P = ClackPrompts -let updatePackageJson = async () => +let updatePackageJson = async (~versions) => await JsonUtils.updateJsonFile("package.json", json => switch json { | Object(config) => @@ -15,7 +15,12 @@ let updatePackageJson = async () => } scripts->Dict.set("res:build", String("rescript")) scripts->Dict.set("res:clean", String("rescript clean")) - scripts->Dict.set("res:dev", String("rescript -w")) + + if RescriptVersions.usesRewatch(versions) { + scripts->Dict.set("res:dev", String("rescript watch")) + } else { + scripts->Dict.set("res:dev", String("rescript -w")) + } | _ => () } ) @@ -101,7 +106,7 @@ let addToExistingProject = async (~projectName) => { await Fs.Promises.appendFile(gitignorePath, `**/*${suffix}${Os.eol}`) } - await updatePackageJson() + await updatePackageJson(~versions) await updateRescriptJson(~projectName, ~sourceDir, ~moduleSystem, ~suffix, ~versions) if !Fs.existsSync(sourceDirPath) { diff --git a/src/NewProject.res b/src/NewProject.res index 366a53e..b159e7d 100644 --- a/src/NewProject.res +++ b/src/NewProject.res @@ -15,10 +15,24 @@ let validateProjectName = projectName => None } -let updatePackageJson = async (~projectName) => +let updatePackageJson = async (~projectName, ~versions) => await JsonUtils.updateJsonFile("package.json", json => switch json { - | Object(config) => config->Dict.set("name", String(projectName)) + | Object(config) => { + config->Dict.set("name", String(projectName)) + + let scripts = switch config->Dict.get("scripts") { + | Some(Object(scripts)) => scripts + | _ => + let scripts = Dict.make() + config->Dict.set("scripts", Object(scripts)) + scripts + } + + if RescriptVersions.usesRewatch(versions) { + scripts->Dict.set("res:dev", String("rescript watch")) + } + } | _ => () } ) @@ -69,7 +83,7 @@ let createProject = async (~templateName, ~projectName, ~versions) => { Process.chdir(projectPath) await Fs.Promises.rename("_gitignore", ".gitignore") - await updatePackageJson(~projectName) + await updatePackageJson(~projectName, ~versions) await updateRescriptJson(~projectName, ~versions) await RescriptVersions.installVersions(versions) diff --git a/src/RescriptVersions.res b/src/RescriptVersions.res index 3a6afd0..d5aef35 100644 --- a/src/RescriptVersions.res +++ b/src/RescriptVersions.res @@ -3,6 +3,7 @@ module P = ClackPrompts let rescript12VersionRange = ">=12.0.0-alpha.5" let rescriptVersionRange = `11.x.x || ${rescript12VersionRange}` let rescriptCoreVersionRange = ">=1.0.0" +let rescriptRewatchVersionRange = ">=12.0.0-alpha.15" type versions = {rescriptVersion: string, rescriptCoreVersion: option} @@ -95,3 +96,6 @@ let installVersions = async ({rescriptVersion, rescriptCoreVersion}) => { let esmModuleSystemName = ({rescriptVersion}) => CompareVersions.compareVersions(rescriptVersion, "11.1.0-rc.8") > 0. ? "esmodule" : "es6" + +let usesRewatch = ({rescriptVersion}) => + CompareVersions.satisfies(rescriptVersion, rescriptRewatchVersionRange) diff --git a/src/RescriptVersions.resi b/src/RescriptVersions.resi index 2e53c4f..da0ac40 100644 --- a/src/RescriptVersions.resi +++ b/src/RescriptVersions.resi @@ -5,3 +5,5 @@ let promptVersions: unit => promise let installVersions: versions => promise let esmModuleSystemName: versions => string + +let usesRewatch: versions => bool