@@ -29,13 +29,24 @@ const templates = [
2929 } ,
3030] ;
3131
32+ function validateProjectName ( projectName ) {
33+ const packageNameRegExp = / ^ [ a - z 0 - 9 - ] + $ / ;
34+
35+ if ( packageNameRegExp . test ( projectName ) ) {
36+ return true ;
37+ } else {
38+ return "Project name may only contain lower case letters, numbers and hyphens." ;
39+ }
40+ }
41+
3242async function getParams ( ) {
3343 return await enquirer . prompt ( [
3444 {
3545 type : "input" ,
3646 name : "projectName" ,
3747 message : "What is the name of your new project?" ,
3848 initial : process . argv [ 2 ] || "my-rescript-app" ,
49+ validate : validateProjectName ,
3950 } ,
4051 {
4152 type : "select" ,
@@ -46,6 +57,17 @@ async function getParams() {
4657 ] ) ;
4758}
4859
60+ function replaceLineInFile ( filename , search , replace ) {
61+ const contents = fs . readFileSync ( filename , "utf8" ) ;
62+ const replaced = contents . replace ( search , replace ) ;
63+ fs . writeFileSync ( filename , replaced , "utf8" ) ;
64+ }
65+
66+ function setProjectName ( templateName , projectName ) {
67+ replaceLineInFile ( "package.json" , `"name": "${ templateName } "` , `"name": "${ projectName } "` ) ;
68+ replaceLineInFile ( "bsconfig.json" , `"name": "${ templateName } "` , `"name": "${ projectName } "` ) ;
69+ }
70+
4971function installPackages ( ) {
5072 console . log ( "Installing packages. This might take a couple of seconds..." ) ;
5173
@@ -94,6 +116,7 @@ async function main() {
94116 fs . cpSync ( templatePath , projectPath , { recursive : true } ) ;
95117 process . chdir ( projectPath ) ;
96118
119+ setProjectName ( templateName , projectName ) ;
97120 installPackages ( ) ;
98121 initGitRepo ( ) ;
99122 logSuccess ( projectName , projectPath ) ;
0 commit comments