From 010e9aba29b709cc1f0997b1add99e2a194b931e Mon Sep 17 00:00:00 2001 From: szymonrybczak Date: Mon, 23 Oct 2023 12:45:18 +0200 Subject: [PATCH 1/3] fix: do not ask for port change if provided `--no-packager` --- .../src/commands/runAndroid/index.ts | 30 +++++++++---------- .../src/commands/runIOS/index.ts | 30 +++++++++---------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/packages/cli-platform-android/src/commands/runAndroid/index.ts b/packages/cli-platform-android/src/commands/runAndroid/index.ts index 0442881c8..3113626d7 100644 --- a/packages/cli-platform-android/src/commands/runAndroid/index.ts +++ b/packages/cli-platform-android/src/commands/runAndroid/index.ts @@ -56,25 +56,25 @@ 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 { + if (packager) { + 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]; } - } else if (packagerStatus === 'unrecognized') { - const result = await handlePortUnavailable(port, config.root, packager); - [port, packager] = [result.port, result.packager]; - } - if (packager) { await startServerInNewWindow( port, config.root, diff --git a/packages/cli-platform-ios/src/commands/runIOS/index.ts b/packages/cli-platform-ios/src/commands/runIOS/index.ts index f57077367..77b65fe0f 100644 --- a/packages/cli-platform-ios/src/commands/runIOS/index.ts +++ b/packages/cli-platform-ios/src/commands/runIOS/index.ts @@ -51,25 +51,25 @@ 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 { + if (packager) { + 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]; } - } else if (packagerStatus === 'unrecognized') { - const result = await handlePortUnavailable(port, ctx.root, packager); - [port, packager] = [result.port, result.packager]; - } - if (packager) { await startServerInNewWindow( port, ctx.root, From 7df0ea6eeae167304c9a7267ec9cb56774653633 Mon Sep 17 00:00:00 2001 From: szymonrybczak Date: Wed, 25 Oct 2023 17:17:56 +0200 Subject: [PATCH 2/3] feat: unify logic into `findDevServerPort` --- .../src/commands/runAndroid/index.ts | 35 ++++++------------ .../src/commands/runIOS/index.ts | 35 ++++++------------ packages/cli-tools/src/findDevServerPort.ts | 37 +++++++++++++++++++ .../cli-tools/src/handlePortUnavailable.ts | 3 +- packages/cli-tools/src/index.ts | 2 +- 5 files changed, 61 insertions(+), 51 deletions(-) create mode 100644 packages/cli-tools/src/findDevServerPort.ts diff --git a/packages/cli-platform-android/src/commands/runAndroid/index.ts b/packages/cli-platform-android/src/commands/runAndroid/index.ts index 3113626d7..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'; @@ -57,30 +55,19 @@ async function runAndroid(_argv: Array, config: Config, args: Flags) { let {packager, port} = args; if (packager) { - 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]; - } - - 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 77b65fe0f..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'; @@ -52,30 +50,19 @@ async function runIOS(_: Array, ctx: Config, args: FlagsT) { await resolvePods(ctx.root, ctx.dependencies, {forceInstall: args.forcePods}); if (packager) { - 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]; - } - - 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..22bbca83d --- /dev/null +++ b/packages/cli-tools/src/findDevServerPort.ts @@ -0,0 +1,37 @@ +import handlePortUnavailable from './handlePortUnavailable'; +import isPackagerRunning from './isPackagerRunning'; +import {logAlreadyRunningBundler} from './port'; + +const findDevServerPort = async ( + port: number, + root: string, +): Promise<{ + port: number; + startPackager: boolean; +}> => { + const packagerStatus = await isPackagerRunning(port); + let startPackager = false; + + 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'; From 26ad4bbffbcfb41b18c2ac9d22c13e5e54673d0a Mon Sep 17 00:00:00 2001 From: szymonrybczak Date: Thu, 26 Oct 2023 23:08:51 +0200 Subject: [PATCH 3/3] fix: avoid modifying arguments --- packages/cli-tools/src/findDevServerPort.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/cli-tools/src/findDevServerPort.ts b/packages/cli-tools/src/findDevServerPort.ts index 22bbca83d..a2a612216 100644 --- a/packages/cli-tools/src/findDevServerPort.ts +++ b/packages/cli-tools/src/findDevServerPort.ts @@ -3,15 +3,17 @@ import isPackagerRunning from './isPackagerRunning'; import {logAlreadyRunningBundler} from './port'; const findDevServerPort = async ( - port: number, + initialPort: number, root: string, ): Promise<{ port: number; startPackager: boolean; }> => { - const packagerStatus = await isPackagerRunning(port); + let port = initialPort; let startPackager = false; + const packagerStatus = await isPackagerRunning(port); + if ( typeof packagerStatus === 'object' && packagerStatus.status === 'running'