diff --git a/packages/cli-platform-android/src/commands/runAndroid/index.ts b/packages/cli-platform-android/src/commands/runAndroid/index.ts index 0442881c8..ba8237919 100644 --- a/packages/cli-platform-android/src/commands/runAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/runAndroid/index.ts @@ -18,10 +18,8 @@ import { CLIError, link, getDefaultUserTerminal, - isPackagerRunning, - logAlreadyRunningBundler, startServerInNewWindow, - handlePortUnavailable, + findDevServerPort, } from '@react-native-community/cli-tools'; import {getAndroidProject} from '../../config/getAndroidProject'; import listAndroidDevices from './listAndroidDevices'; @@ -56,31 +54,20 @@ async function runAndroid(_argv: Array, config: Config, args: Flags) { let {packager, port} = args; - const packagerStatus = await isPackagerRunning(port); - - if ( - typeof packagerStatus === 'object' && - packagerStatus.status === 'running' - ) { - if (packagerStatus.root === config.root) { - packager = false; - logAlreadyRunningBundler(port); - } else { - const result = await handlePortUnavailable(port, config.root, packager); - [port, packager] = [result.port, result.packager]; - } - } else if (packagerStatus === 'unrecognized') { - const result = await handlePortUnavailable(port, config.root, packager); - [port, packager] = [result.port, result.packager]; - } - if (packager) { - await startServerInNewWindow( + const {port: newPort, startPackager} = await findDevServerPort( port, config.root, - config.reactNativePath, - args.terminal, ); + + if (startPackager) { + await startServerInNewWindow( + newPort, + config.root, + config.reactNativePath, + args.terminal, + ); + } } if (config.reactNativeVersion !== 'unknown') { diff --git a/packages/cli-platform-ios/src/commands/runIOS/index.ts b/packages/cli-platform-ios/src/commands/runIOS/index.ts index f57077367..da6c2c52c 100644 --- a/packages/cli-platform-ios/src/commands/runIOS/index.ts +++ b/packages/cli-platform-ios/src/commands/runIOS/index.ts @@ -18,9 +18,7 @@ import { link, getDefaultUserTerminal, startServerInNewWindow, - isPackagerRunning, - logAlreadyRunningBundler, - handlePortUnavailable, + findDevServerPort, } from '@react-native-community/cli-tools'; import {buildProject} from '../buildIOS/buildProject'; import {BuildFlags, buildOptions} from '../buildIOS/buildOptions'; @@ -51,31 +49,20 @@ async function runIOS(_: Array, ctx: Config, args: FlagsT) { // check if pods need to be installed await resolvePods(ctx.root, ctx.dependencies, {forceInstall: args.forcePods}); - const packagerStatus = await isPackagerRunning(port); - - if ( - typeof packagerStatus === 'object' && - packagerStatus.status === 'running' - ) { - if (packagerStatus.root === ctx.root) { - packager = false; - logAlreadyRunningBundler(port); - } else { - const result = await handlePortUnavailable(port, ctx.root, packager); - [port, packager] = [result.port, result.packager]; - } - } else if (packagerStatus === 'unrecognized') { - const result = await handlePortUnavailable(port, ctx.root, packager); - [port, packager] = [result.port, result.packager]; - } - if (packager) { - await startServerInNewWindow( + const {port: newPort, startPackager} = await findDevServerPort( port, ctx.root, - ctx.reactNativePath, - args.terminal, ); + + if (startPackager) { + await startServerInNewWindow( + newPort, + ctx.root, + ctx.reactNativePath, + args.terminal, + ); + } } if (ctx.reactNativeVersion !== 'unknown') { diff --git a/packages/cli-tools/src/findDevServerPort.ts b/packages/cli-tools/src/findDevServerPort.ts new file mode 100644 index 000000000..a2a612216 --- /dev/null +++ b/packages/cli-tools/src/findDevServerPort.ts @@ -0,0 +1,39 @@ +import handlePortUnavailable from './handlePortUnavailable'; +import isPackagerRunning from './isPackagerRunning'; +import {logAlreadyRunningBundler} from './port'; + +const findDevServerPort = async ( + initialPort: number, + root: string, +): Promise<{ + port: number; + startPackager: boolean; +}> => { + let port = initialPort; + let startPackager = false; + + const packagerStatus = await isPackagerRunning(port); + + if ( + typeof packagerStatus === 'object' && + packagerStatus.status === 'running' + ) { + if (packagerStatus.root === root) { + startPackager = false; + logAlreadyRunningBundler(port); + } else { + const result = await handlePortUnavailable(port, root); + [port, startPackager] = [result.port, result.packager]; + } + } else if (packagerStatus === 'unrecognized') { + const result = await handlePortUnavailable(port, root); + [port, startPackager] = [result.port, result.packager]; + } + + return { + port, + startPackager, + }; +}; + +export default findDevServerPort; diff --git a/packages/cli-tools/src/handlePortUnavailable.ts b/packages/cli-tools/src/handlePortUnavailable.ts index de811b77f..0048355f9 100644 --- a/packages/cli-tools/src/handlePortUnavailable.ts +++ b/packages/cli-tools/src/handlePortUnavailable.ts @@ -8,13 +8,12 @@ import { const handlePortUnavailable = async ( initialPort: number, projectRoot: string, - initialPackager?: boolean, ): Promise<{ port: number; packager: boolean; }> => { const {nextPort, start} = await getNextPort(initialPort, projectRoot); - let packager = initialPackager === true; + let packager = true; let port = initialPort; if (!start) { diff --git a/packages/cli-tools/src/index.ts b/packages/cli-tools/src/index.ts index d0e1b92ba..23beb47fb 100644 --- a/packages/cli-tools/src/index.ts +++ b/packages/cli-tools/src/index.ts @@ -13,7 +13,7 @@ export {default as printRunDoctorTip} from './printRunDoctorTip'; export * from './prompt'; export * as link from './doclink'; export {default as startServerInNewWindow} from './startServerInNewWindow'; -export {default as handlePortUnavailable} from './handlePortUnavailable'; +export {default as findDevServerPort} from './findDevServerPort'; export * from './port'; export {default as cacheManager} from './cacheManager'; export {default as runSudo} from './runSudo';