@@ -451,7 +451,7 @@ const spinVanillaServices = async ({ serviceDirectories, microservicesDir, mode
451451 spinner . fail ( `Service in directory ${ dir } exited with code ${ code } ` ) ;
452452 } else {
453453 spinner . succeed ( `Service in directory ${ dir } started successfully` ) ;
454-
454+
455455 }
456456 } ) ;
457457 } ) ) ;
@@ -967,9 +967,15 @@ const addPackageJson = async ({ project_root, answers }) => {
967967 }
968968 }
969969 } ) ;
970-
970+ let warningMessage
971971 childProcess . stderr . on ( 'data' , data => {
972- spinner . text = 'Encountered an issue, check logs for more info.' ;
972+ const output = data . toString ( ) ;
973+
974+ if ( output . toLowerCase ( ) . includes ( 'warning' ) ) {
975+ warningMessage = output . split ( '\n' ) . find ( line => line . toLowerCase ( ) . includes ( 'warning' ) ) ;
976+ } else {
977+ spinner . text = 'Encountered an issue, check logs for more info.' ;
978+ }
973979 } ) ;
974980
975981 childProcess . on ( 'error' , error => {
@@ -981,6 +987,12 @@ const addPackageJson = async ({ project_root, answers }) => {
981987 spinner . fail ( 'Command failed to complete successfully' ) ;
982988 return ;
983989 }
990+ spinner . stop ( )
991+ if ( warningMessage ) {
992+ console . log ( '============================' )
993+ console . warn ( warningMessage )
994+ console . log ( '============================' )
995+ }
984996 spinner . succeed ( 'Dependencies installed successfully' ) ;
985997 spinner . info ( `To start the project, run 'cd ${ answers . repo_name } && suite start -v ${ answers . service_name } '` )
986998 } ) ;
@@ -1069,7 +1081,7 @@ const addMicroservice = ({ project_root, answers }) => {
10691081 writeFile ( join ( current_dir , 'test1.js' ) , assets . snapshotTestContent ( ) ) ;
10701082 break ;
10711083 case `GraphQL/app1` :
1072- writeFile ( join ( current_dir , 'appollo-server.js' ) , assets . apolloServerContent ( ) ) ;
1084+ writeFile ( join ( current_dir , 'appollo-server.js' ) , assets . apolloServerContent ( { answers } ) ) ;
10731085 break ;
10741086 case `k8s/${ answers . service_name } ` :
10751087 // TODO: move k8s into a function
@@ -1084,10 +1096,6 @@ const addMicroservice = ({ project_root, answers }) => {
10841096 } ) ;
10851097
10861098 generateMCSHelper ( { project_root, answers } )
1087- writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , 'index.js' ) , assets . serverContent ( { answers } ) ) ;
1088- writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , '.env' ) , assets . envContent ( ) ) ;
1089- writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , '.env.dev' ) , assets . envContent ( ) ) ;
1090- writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , 'ecosystem.config.js' ) , assets . ecosystemContent ( ) ) ;
10911099 mkdirSync ( join ( project_root , '.vscode' ) , { recursive : true } )
10921100 writeFileSync ( join ( project_root , '.gitignore' ) , assets . gitignoreContent ( ) ) ;
10931101 writeFileSync ( join ( project_root , '.vscode' , 'launch.json' ) , JSON . stringify ( assets . debuggerConfigContent ( ) , null , 2 ) ) ;
@@ -1203,7 +1211,7 @@ const injectService = async ({ project_root, answers, workspace_name }) => {
12031211 } ) ;
12041212
12051213 await writeFile ( join ( service_path , 'package.json' ) , JSON . stringify ( packageJsonContent , null , 2 ) ) ;
1206-
1214+ registerServiceWithSuiteJson ( { root_dir : project_root , name : answers . service_name , port : answers . port } )
12071215 spinner . succeed ( 'Service injected successfully' ) ;
12081216 } catch ( error ) {
12091217 spinner . fail ( `Failed to inject service: ${ error . message } ` ) ;
@@ -1259,6 +1267,10 @@ const generateMCSHelper = ({ project_root, answers }) => {
12591267 const indexContent = mcs === 'models' ? assets . modelIndexContent ( ) : mcs === 'routes' ? assets . routesIndexContent ( ) : mcs === 'controllers' ? assets . controllersIndexContent ( ) : assets . servicesIndexContent ( ) ;
12601268 writeFileSync ( join ( mcsPath , 'index.js' ) , indexContent ) ;
12611269 } ) ;
1270+ writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , 'index.js' ) , assets . serverContent ( { answers } ) ) ;
1271+ writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , '.env' ) , assets . envContent ( { answers } ) ) ;
1272+ writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , '.env.dev' ) , assets . envContent ( { answers } ) ) ;
1273+ writeFile ( join ( `${ project_root } /microservices/${ answers . service_name } ` , 'ecosystem.config.js' ) , assets . ecosystemContent ( { answers } ) ) ;
12621274}
12631275
12641276/**
@@ -1356,11 +1368,52 @@ const scaffoldNewLibrary = async ({ answers }) => {
13561368 * @returns {void }
13571369 */
13581370const addProjectConfigs = ( { project_root, answers } ) => {
1359- writeFile ( join ( project_root , 'suite.json' ) , JSON . stringify ( assets . suiteJSON ( { answers } ) , null , 2 ) ) ;
1371+ const { service_name, port, ...suite_json } = answers
1372+ suite_json [ 'services' ] = [
1373+ {
1374+ name : service_name ,
1375+ port : answers . port
1376+ }
1377+ ]
1378+ answers . apis . includes ( 'GraphQL' ) && ( suite_json [ 'apollo_servers' ] = [ {
1379+ name : 'app1' ,
1380+ port : ( answers . port + 1000 ) < 5000 ? 4001 : 8001
1381+ } ] )
1382+ writeFile ( join ( project_root , 'suite.json' ) , JSON . stringify ( assets . suiteJSON ( { answers : suite_json } ) , null , 2 ) ) ;
13601383 writeFile ( join ( project_root , 'suite.config' ) , assets . suiteConfig ( { answers } ) ) ;
13611384 writeFile ( join ( project_root , '.suiterc' ) , assets . suiteRC ( { answers } ) ) ;
13621385
13631386}
1387+
1388+ // Function to get the next available port
1389+ const getNextAvailablePort = ( { services } ) => {
1390+ const usedPorts = services . map ( service => service . port ) ;
1391+ let port = 9001 ;
1392+ while ( usedPorts . includes ( port ) ) {
1393+ port ++ ;
1394+ }
1395+ return port ;
1396+ } ;
1397+
1398+ const getExistingServices = ( { currentDir } ) => {
1399+ const root_dir = generatRootPath ( { currentDir, height : 5 } )
1400+ // Read the project configuration file
1401+ const configPath = resolve ( root_dir , 'suite.json' ) ;
1402+ const config = JSON . parse ( readFileSync ( configPath , 'utf8' ) ) ;
1403+ const existingServices = config . services || [ ] ;
1404+ return existingServices
1405+ }
1406+ const registerServiceWithSuiteJson = ( { root_dir, name, port } ) => {
1407+ // Read the project configuration file
1408+ const configPath = resolve ( root_dir , 'suite.json' ) ;
1409+ const config = JSON . parse ( readFileSync ( configPath , 'utf8' ) ) ;
1410+ if ( ! config . services ) {
1411+ config . services = [ ] ;
1412+ }
1413+ config . services . push ( { name, port } ) ;
1414+ writeFile ( configPath , JSON . stringify ( config , null , 2 ) , 'utf8' ) ;
1415+ }
1416+ const readFileContent = ( { path } ) => { }
13641417module . exports = {
13651418 generateDirectoryPath,
13661419 changeDirectory,
@@ -1386,5 +1439,7 @@ module.exports = {
13861439 scaffoldNewRepo,
13871440 releasePackage,
13881441 scaffoldNewService,
1389- scaffoldNewLibrary
1442+ scaffoldNewLibrary,
1443+ getNextAvailablePort,
1444+ getExistingServices
13901445}
0 commit comments