format import process from 'process' ; import chalk from 'chalk' ; import path from 'path' ; import { startFlipperServer } from './startFlipperServer' ; import { startBaseServer } from './startBaseServer' ; import { startSocketServer } from './startSocketServer' ; import { startWebServerDev } from './startWebServerDev' ; import yargs from 'yargs' ; import open from 'open' ; import { sleep } from 'flipper-common' ; const argv = yargs . usage ( 'yarn flipper-server [args]' ) . options ( { port : { describe : 'Port to serve on' , type : 'number' , default : 52342 , } , bundler : { describe : 'Serve the UI bundle from source. This option only works for source checkouts' , type : 'boolean' , default : false , } , open : { describe : 'Open Flipper in the default browser after starting' , type : 'boolean' , default : true , } , failFast : { describe : 'Exit the process immediately if the server cannot start, for example due to an incorrect configuration.' , type : 'boolean' , default : false , } , } ) . version ( 'DEV' ) . help ( ) . parse ( process . argv . slice ( 1 ) ) ; console . log ( `Starting flipper server with ${ argv . bundler ? 'UI bundle from source' : 'pre-bundled UI' }` ) ; const rootDir = argv . bundler ? path . resolve ( __dirname , '..' , '..' ) : path . resolve ( __dirname , '..' ) ; const staticDir = path . join ( rootDir , 'static' ) ; async function start ( ) { console . debug = function ( ) { } ; const { app , server , socket } = await startBaseServer ( { port : argv . port , staticDir , entry : 'index.web.dev.html' , } ) ; const flipperServer = await startFlipperServer ( rootDir , staticDir ) ; if ( argv . failFast ) { flipperServer . on ( 'server-state' , ( { state } ) => { if ( state === 'error' ) { process . exit ( 1 ) ; } } ) ; } await flipperServer . connect ( ) ; if ( argv . bundler ) { await startWebServerDev ( app , server , socket , rootDir ) ; } startSocketServer ( flipperServer , socket ) ; } start ( ) . then ( ( ) => { const url = `http://localhost:${ argv . port }/index.web${ argv . bundler ? '.dev' : '' }.html` ; console . log ( 'Flipper server started at ' + chalk . green ( chalk . bold ( url ) ) ) ; if ( argv . open ) { sleep ( 1000 ) ; open ( url ) ; } } ) . catch ( ( e ) => { console . error ( chalk . red ( 'Server startup error: ' ) , e ) ; process . exit ( 1 ) ; } ) ;