@@ -6,13 +6,13 @@ let packageNameRegExp = /^[a-z0-9-]+$/
66
77let validateProjectName = projectName =>
88 if projectName -> String .trim -> String .length === 0 {
9- Some ("Project name must not be empty." )
9+ Error ("Project name must not be empty." )
1010 } else if ! (packageNameRegExp -> RegExp .test (projectName )) {
11- Some ("Project name may only contain lower case letters, numbers and hyphens." )
11+ Error ("Project name may only contain lower case letters, numbers and hyphens." )
1212 } else if Fs .existsSync (Path .join2 (Process .cwd (), projectName )) {
13- Some (` The folder ${projectName} already exist in the current directory.` )
13+ Error (` The folder ${projectName} already exist in the current directory.` )
1414 } else {
15- None
15+ Ok ()
1616 }
1717
1818let updatePackageJson = async (~projectName , ~versions ) =>
@@ -117,14 +117,23 @@ let createNewProject = async () => {
117117 let useDefaultVersions = Option .isSome (commandLineArguments .templateName )
118118
119119 let projectName = switch commandLineArguments .projectName {
120- | Some (projectName ) if useDefaultVersions => projectName -> validateProjectName -> Option .getOrThrow
120+ | Some (projectName ) if useDefaultVersions =>
121+ // Note this throws in the some case, which is why we cannot use Option.getOrThrow here.
122+ switch validateProjectName (projectName ) {
123+ | Error (message ) => JsError .throwWithMessage (message )
124+ | Ok () => projectName
125+ }
121126
122127 | initialValue =>
123128 await P .text ({
124129 message : "What is the name of your new ReScript project?" ,
125130 placeholder : "my-rescript-app" ,
126131 ?initialValue ,
127- validate : validateProjectName ,
132+ validate : projectName =>
133+ switch validateProjectName (projectName ) {
134+ | Ok () => None
135+ | Error (error ) => Some (error )
136+ },
128137 })-> P .resultOrRaise
129138 }
130139
0 commit comments