@@ -78,6 +78,14 @@ async function updatePackageJson(projectName) {
78
78
) ;
79
79
}
80
80
81
+ async function updateExistingPackageJson ( ) {
82
+ await updateFile ( "package.json" , contents => {
83
+ let config = JSON . parse ( contents ) ;
84
+ config [ "scripts" ] = { ...( config [ "scripts" ] || { } ) , "res:dev" : "rescript build -w" } ;
85
+ return JSON . stringify ( config , null , 2 ) ;
86
+ } ) ;
87
+ }
88
+
81
89
async function updateRescriptJson ( projectName , sourceDir ) {
82
90
await updateFile ( "rescript.json" , contents => {
83
91
const config = JSON . parse ( contents ) ;
@@ -107,21 +115,17 @@ function getProjectPackageJson() {
107
115
return JSON . parse ( contents ) ;
108
116
}
109
117
110
- async function addToExistingProject ( ) {
111
- const projectName = getProjectPackageJson ( ) . name ;
112
-
118
+ /**
119
+ * @param {string } projectName
120
+ */
121
+ async function addToExistingProject ( projectName ) {
113
122
const templatePath = path . join ( __dirname , "templates" , "rescript-template-basic" ) ;
114
123
const projectPath = process . cwd ( ) ;
115
124
const gitignorePath = path . join ( projectPath , ".gitignore" ) ;
116
125
117
126
const s = p . spinner ( ) ;
118
127
119
128
try {
120
- const addToProj = await p . confirm ( {
121
- message : `Detected a package.json file. Do you want to add ReScript to "${ projectName } "?` ,
122
- } ) ;
123
- checkCancel ( addToProj ) ;
124
-
125
129
s . start ( "Loading available versions..." ) ;
126
130
const [ rescriptVersions , rescriptCoreVersions ] = await Promise . all ( [
127
131
getPackageVersions ( "rescript" , rescriptVersionRange ) ,
@@ -149,21 +153,24 @@ async function addToExistingProject() {
149
153
} ) ;
150
154
checkCancel ( sourceDir ) ;
151
155
156
+ s . start ( "Adding ReScript to your project..." ) ;
157
+
152
158
await fs . promises . copyFile (
153
159
path . join ( templatePath , "rescript.json" ) ,
154
160
path . join ( projectPath , "rescript.json" )
155
161
) ;
156
162
157
163
if ( fs . existsSync ( gitignorePath ) ) {
158
- await fs . promises . appendFile ( gitignorePath , "/lib/" + os . EOL + ".bsb.lock" + os . EOL ) ;
164
+ await fs . promises . appendFile ( gitignorePath , os . EOL + "/lib/" + os . EOL + ".bsb.lock" + os . EOL ) ;
159
165
}
160
166
167
+ await updateExistingPackageJson ( ) ;
161
168
await updateRescriptJson ( projectName , sourceDir ) ;
162
169
163
170
const sourceDirPath = path . join ( projectPath , sourceDir ) ;
164
171
165
172
if ( ! fs . existsSync ( sourceDirPath ) ) {
166
- fs . mkdirSync ( sourceDirPath ) ;
173
+ await fs . promises . mkdir ( sourceDirPath ) ;
167
174
}
168
175
169
176
await fs . promises . copyFile (
@@ -176,7 +183,7 @@ async function addToExistingProject() {
176
183
await promisify ( exec ) ( "npm add " + packages . join ( " " ) ) ;
177
184
178
185
s . stop ( "Added ReScript to your project." ) ;
179
- p . note ( `cd ${ projectName } \nnpm run res:dev` , "Next steps" ) ;
186
+ p . note ( `npm run res:dev` , "Next steps" ) ;
180
187
p . outro ( `Happy hacking!` ) ;
181
188
} catch ( error ) {
182
189
console . warn ( error ) ;
@@ -269,10 +276,21 @@ https://www.rescript-lang.org\n\nCreate a new ReScript 11 project with modern de
269
276
"Welcome to ReScript!"
270
277
) ;
271
278
272
- const existingPackageJson = fs . existsSync ( path . join ( process . cwd ( ) , "package.json" ) ) ;
279
+ const existingProjectDetected = fs . existsSync ( path . join ( process . cwd ( ) , "package.json" ) ) ;
273
280
274
- if ( existingPackageJson ) {
275
- addToExistingProject ( ) ;
281
+ if ( existingProjectDetected ) {
282
+ const projectName = getProjectPackageJson ( ) . name ;
283
+
284
+ const addToExistingProjectConfirmed = await p . confirm ( {
285
+ message : `Detected a package.json file. Do you want to add ReScript to "${ projectName } "?` ,
286
+ } ) ;
287
+ checkCancel ( addToExistingProjectConfirmed ) ;
288
+
289
+ if ( addToExistingProjectConfirmed ) {
290
+ addToExistingProject ( projectName ) ;
291
+ } else {
292
+ createNewProject ( ) ;
293
+ }
276
294
} else {
277
295
createNewProject ( ) ;
278
296
}
0 commit comments