| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const commander = require('commander'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const packageJson = require('./package.json'); | 
					
						
							|  |  |  | const buildStarter = require('./utils/build-starter'); | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  | const promptUser = require('./utils/prompt-user'); | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const program = new commander.Command(packageJson.name); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-10 17:55:31 +01:00
										 |  |  | const incompatibleQuickstartOptions = [ | 
					
						
							|  |  |  |   'dbclient', | 
					
						
							|  |  |  |   'dbhost', | 
					
						
							|  |  |  |   'dbport', | 
					
						
							|  |  |  |   'dbname', | 
					
						
							|  |  |  |   'dbusername', | 
					
						
							|  |  |  |   'dbpassword', | 
					
						
							|  |  |  |   'dbssl', | 
					
						
							|  |  |  |   'dbfile', | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | program | 
					
						
							|  |  |  |   .version(packageJson.version) | 
					
						
							| 
									
										
										
										
											2021-11-18 17:39:40 +01:00
										 |  |  |   .arguments('[directory], [starter]') | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |   .option('--use-npm', 'Force usage of npm instead of yarn to create the project') | 
					
						
							|  |  |  |   .option('--debug', 'Display database connection error') | 
					
						
							|  |  |  |   .option('--quickstart', 'Quickstart app creation') | 
					
						
							|  |  |  |   .option('--dbclient <dbclient>', 'Database client') | 
					
						
							|  |  |  |   .option('--dbhost <dbhost>', 'Database host') | 
					
						
							|  |  |  |   .option('--dbport <dbport>', 'Database port') | 
					
						
							|  |  |  |   .option('--dbname <dbname>', 'Database name') | 
					
						
							|  |  |  |   .option('--dbusername <dbusername>', 'Database username') | 
					
						
							|  |  |  |   .option('--dbpassword <dbpassword>', 'Database password') | 
					
						
							|  |  |  |   .option('--dbssl <dbssl>', 'Database SSL') | 
					
						
							|  |  |  |   .option('--dbfile <dbfile>', 'Database file path for sqlite') | 
					
						
							|  |  |  |   .option('--dbforce', 'Overwrite database content if any') | 
					
						
							|  |  |  |   .description( | 
					
						
							|  |  |  |     'Create a fullstack monorepo application using the strapi backend template specified in the provided starter' | 
					
						
							|  |  |  |   ) | 
					
						
							| 
									
										
										
										
											2021-11-18 17:39:40 +01:00
										 |  |  |   .action((directory, starter, programArgs) => { | 
					
						
							|  |  |  |     const projectArgs = { projectName: directory, starter }; | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  |     initProject(projectArgs, programArgs); | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  | function generateApp(projectArgs, programArgs) { | 
					
						
							| 
									
										
										
										
											2021-11-18 17:39:40 +01:00
										 |  |  |   if (!projectArgs.projectName || !projectArgs.starter) { | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  |     console.error( | 
					
						
							| 
									
										
										
										
											2021-11-18 17:39:40 +01:00
										 |  |  |       'Please specify the <directory> and <starter> of your project when using --quickstart' | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  |     ); | 
					
						
							|  |  |  |     // eslint-disable-next-line no-process-exit
 | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return buildStarter(projectArgs, programArgs); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function initProject(projectArgs, program) { | 
					
						
							| 
									
										
										
										
											2021-11-10 17:55:31 +01:00
										 |  |  |   const hasIncompatibleQuickstartOptions = incompatibleQuickstartOptions.some(opt => program[opt]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (program.quickstart && hasIncompatibleQuickstartOptions) { | 
					
						
							|  |  |  |     console.error( | 
					
						
							|  |  |  |       `The quickstart option is incompatible with the following options: ${incompatibleQuickstartOptions.join( | 
					
						
							|  |  |  |         ', ' | 
					
						
							|  |  |  |       )}`
 | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (hasIncompatibleQuickstartOptions) { | 
					
						
							|  |  |  |     program.quickstart = false; // Will disable the quickstart question because != 'undefined'
 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-18 17:39:40 +01:00
										 |  |  |   const { projectName, starter } = projectArgs; | 
					
						
							| 
									
										
										
										
											2021-11-22 09:29:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  |   if (program.quickstart) { | 
					
						
							|  |  |  |     return generateApp(projectArgs, program); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-22 09:29:11 +01:00
										 |  |  |   const prompt = await promptUser(projectName, starter, program); | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   const promptProjectArgs = { | 
					
						
							|  |  |  |     projectName: prompt.directory || projectName, | 
					
						
							| 
									
										
										
										
											2021-11-18 17:39:40 +01:00
										 |  |  |     starter: prompt.starter || starter, | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const programArgs = { | 
					
						
							|  |  |  |     ...program, | 
					
						
							| 
									
										
										
										
											2021-11-10 17:55:31 +01:00
										 |  |  |     quickstart: prompt.quick || program.quickstart, | 
					
						
							| 
									
										
										
										
											2021-06-02 14:55:33 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return generateApp(promptProjectArgs, programArgs); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-02-18 11:46:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | try { | 
					
						
							|  |  |  |   program.parse(process.argv); | 
					
						
							|  |  |  | } catch (err) { | 
					
						
							|  |  |  |   if (err.exitCode && err.exitCode != 0) { | 
					
						
							|  |  |  |     program.outputHelp(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |