Skip to content

Commit 5c3b84b

Browse files
committed
fix: move logic to run-ios/android commands
1 parent d7ab6ab commit 5c3b84b

File tree

14 files changed

+156
-143
lines changed

14 files changed

+156
-143
lines changed

packages/cli-platform-android/src/commands/runAndroid/index.ts

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ import {
1818
CLIError,
1919
link,
2020
getDefaultUserTerminal,
21+
isPackagerRunning,
22+
getNextPort,
23+
logAlreadyRunningBundler,
24+
askForPortChange,
25+
logChangePortInstructions,
26+
startServerInNewWindow,
2127
} from '@react-native-community/cli-tools';
2228
import {getAndroidProject} from '../../config/getAndroidProject';
2329
import listAndroidDevices from './listAndroidDevices';
@@ -28,7 +34,6 @@ import {build, BuildFlags, options} from '../buildAndroid';
2834
import {promptForTaskSelection} from './listAndroidTasks';
2935
import {getTaskNames} from './getTaskNames';
3036
import {checkUsers, promptForUser} from './listAndroidUsers';
31-
import execa from 'execa';
3237

3338
export interface Flags extends BuildFlags {
3439
appId: string;
@@ -51,6 +56,50 @@ export type AndroidProject = NonNullable<Config['project']['android']>;
5156
async function runAndroid(_argv: Array<string>, config: Config, args: Flags) {
5257
link.setPlatform('android');
5358

59+
let {packager, port} = args;
60+
61+
const packagerStatus = await isPackagerRunning(port);
62+
63+
const handleSomethingRunningOnPort = async () => {
64+
const {nextPort, start} = await getNextPort(port, config.root);
65+
if (!start) {
66+
packager = false;
67+
logAlreadyRunningBundler(nextPort);
68+
} else {
69+
const {change} = await askForPortChange(nextPort);
70+
71+
if (change) {
72+
port = nextPort;
73+
} else {
74+
packager = false;
75+
logChangePortInstructions(port);
76+
}
77+
}
78+
};
79+
80+
if (
81+
typeof packagerStatus === 'object' &&
82+
packagerStatus.status === 'running'
83+
) {
84+
if (packagerStatus.root === config.root) {
85+
packager = false;
86+
logAlreadyRunningBundler(port);
87+
} else {
88+
await handleSomethingRunningOnPort();
89+
}
90+
} else if (packagerStatus === 'unrecognized') {
91+
await handleSomethingRunningOnPort();
92+
}
93+
94+
if (packager) {
95+
await startServerInNewWindow(
96+
port,
97+
config.root,
98+
config.reactNativePath,
99+
args.terminal,
100+
);
101+
}
102+
54103
if (config.reactNativeVersion !== 'unknown') {
55104
link.setVersion(config.reactNativeVersion);
56105
}
@@ -74,16 +123,6 @@ async function runAndroid(_argv: Array<string>, config: Config, args: Flags) {
74123
}
75124

76125
const androidProject = getAndroidProject(config);
77-
if (args.packager && args.terminal) {
78-
await execa('node', [
79-
path.join(config.reactNativePath, 'cli.js'),
80-
'start',
81-
'--port',
82-
args.port.toString(),
83-
'--terminal',
84-
args.terminal,
85-
]);
86-
}
87126

88127
return buildAndRun(args, androidProject);
89128
}

packages/cli-platform-ios/src/commands/runIOS/index.ts

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ import {
1717
CLIError,
1818
link,
1919
getDefaultUserTerminal,
20+
startServerInNewWindow,
21+
isPackagerRunning,
22+
getNextPort,
23+
askForPortChange,
24+
logAlreadyRunningBundler,
25+
logChangePortInstructions,
2026
} from '@react-native-community/cli-tools';
2127
import {BuildFlags, buildProject} from '../buildIOS/buildProject';
2228
import {iosBuildOptions} from '../buildIOS';
@@ -28,7 +34,6 @@ import {getConfigurationScheme} from '../../tools/getConfigurationScheme';
2834
import {selectFromInteractiveMode} from '../../tools/selectFromInteractiveMode';
2935
import {promptForDeviceSelection} from '../../tools/prompts';
3036
import getSimulators from '../../tools/getSimulators';
31-
import execa from 'execa';
3237

3338
export interface FlagsT extends BuildFlags {
3439
simulator?: string;
@@ -47,6 +52,50 @@ export interface FlagsT extends BuildFlags {
4752
async function runIOS(_: Array<string>, ctx: Config, args: FlagsT) {
4853
link.setPlatform('ios');
4954

55+
let {packager, port} = args;
56+
57+
const packagerStatus = await isPackagerRunning(port);
58+
59+
const handleSomethingRunningOnPort = async () => {
60+
const {nextPort, start} = await getNextPort(port, ctx.root);
61+
if (!start) {
62+
packager = false;
63+
logAlreadyRunningBundler(nextPort);
64+
} else {
65+
const {change} = await askForPortChange(nextPort);
66+
67+
if (change) {
68+
port = nextPort;
69+
} else {
70+
packager = false;
71+
logChangePortInstructions(port);
72+
}
73+
}
74+
};
75+
76+
if (
77+
typeof packagerStatus === 'object' &&
78+
packagerStatus.status === 'running'
79+
) {
80+
if (packagerStatus.root === ctx.root) {
81+
packager = false;
82+
logAlreadyRunningBundler(port);
83+
} else {
84+
await handleSomethingRunningOnPort();
85+
}
86+
} else if (packagerStatus === 'unrecognized') {
87+
await handleSomethingRunningOnPort();
88+
}
89+
90+
if (packager) {
91+
await startServerInNewWindow(
92+
port,
93+
ctx.root,
94+
ctx.reactNativePath,
95+
args.terminal,
96+
);
97+
}
98+
5099
if (ctx.reactNativeVersion !== 'unknown') {
51100
link.setVersion(ctx.reactNativeVersion);
52101
}
@@ -126,17 +175,6 @@ async function runIOS(_: Array<string>, ctx: Config, args: FlagsT) {
126175
} "${chalk.bold(xcodeProject.name)}"`,
127176
);
128177

129-
if (args.packager && args.terminal) {
130-
await execa('node', [
131-
path.join(ctx.reactNativePath, 'cli.js'),
132-
'start',
133-
'--port',
134-
args.port.toString(),
135-
'--terminal',
136-
args.terminal,
137-
]);
138-
}
139-
140178
const availableDevices = await listIOSDevices();
141179
if (modifiedArgs.listDevices || modifiedArgs.interactive) {
142180
if (modifiedArgs.device || modifiedArgs.udid) {

packages/cli-plugin-metro/src/commands/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,3 @@ import startCommand from './start';
44
export default [bundleCommand, ramBundleCommand, startCommand];
55
export {buildBundleWithConfig} from './bundle';
66
export type {CommandLineArgs} from './bundle';
7-
export {startServerInNewWindow} from './start';

packages/cli-plugin-metro/src/commands/start/index.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,5 @@ export default {
8888
name: '--no-interactive',
8989
description: 'Disables interactive mode',
9090
},
91-
{
92-
name: '--terminal',
93-
description: 'Specify terminal app to use for running Metro',
94-
},
9591
],
9692
};
97-
98-
export {startServerInNewWindow} from './startServerInNewWindow';

packages/cli-plugin-metro/src/commands/start/runServer.ts

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,12 @@ import {
2121
isPackagerRunning,
2222
logger,
2323
version,
24+
getNextPort,
25+
askForPortChange,
26+
logAlreadyRunningBundler,
27+
logChangePortInstructions,
2428
} from '@react-native-community/cli-tools';
2529
import enableWatchMode from './watchMode';
26-
import {startServerInNewWindow} from './startServerInNewWindow';
27-
import getNextPort from '../../tools/getNextPort';
28-
import askForPortChange from '../../tools/askForPortChange';
29-
import askForProcessKill from '../../tools/askForProcessKill';
30-
import getProcessIdFromPort from '../../tools/getProcessIdFromPort';
31-
import execa from 'execa';
3230
import chalk from 'chalk';
3331

3432
export type Args = {
@@ -46,52 +44,29 @@ export type Args = {
4644
transformer?: string;
4745
watchFolders?: string[];
4846
config?: string;
49-
terminal?: string;
5047
projectRoot?: string;
5148
interactive: boolean;
5249
};
5350

54-
function logAlreadyRunningBundler(port: number) {
55-
logger.info(`Metro Bundler is already for this project on port ${port}.`);
56-
}
57-
58-
function logChangePortInstructions(port: number) {
59-
logger.info(
60-
`Please close the other packager running on port ${port}, or select another port with "--port".`,
61-
);
62-
}
63-
6451
async function runServer(_argv: Array<string>, ctx: Config, args: Args) {
6552
let port = args.port ?? 8081;
66-
67-
if (args.terminal) {
68-
startServerInNewWindow(port, ctx.root, ctx.reactNativePath, args.terminal);
69-
return;
70-
}
53+
console.log({port});
7154

7255
const packagerStatus = await isPackagerRunning(port);
73-
56+
console.log({packagerStatus});
7457
const handleSomethingRunningOnPort = async () => {
75-
const {change: kill} = await askForProcessKill(port);
76-
if (kill) {
77-
const pid = await getProcessIdFromPort(port);
78-
79-
if (pid) {
80-
execa.sync('kill', [pid]);
81-
}
58+
const {nextPort, start} = await getNextPort(port, ctx.root);
59+
if (!start) {
60+
logAlreadyRunningBundler(nextPort);
61+
process.exit();
8262
} else {
83-
const {nextPort, start} = await getNextPort(port, ctx.root);
84-
if (!start) {
85-
logAlreadyRunningBundler(nextPort);
63+
const {change} = await askForPortChange(nextPort);
64+
console.log('halo');
65+
if (change) {
66+
port = nextPort;
8667
} else {
87-
const {change} = await askForPortChange(nextPort);
88-
89-
if (change) {
90-
port = nextPort;
91-
} else {
92-
logChangePortInstructions(port);
93-
return;
94-
}
68+
logChangePortInstructions(port);
69+
process.exit();
9570
}
9671
}
9772
};
@@ -102,14 +77,16 @@ async function runServer(_argv: Array<string>, ctx: Config, args: Args) {
10277
) {
10378
if (packagerStatus.root === ctx.root) {
10479
logAlreadyRunningBundler(port);
105-
return;
80+
process.exit();
10681
} else {
10782
await handleSomethingRunningOnPort();
10883
}
10984
} else if (packagerStatus === 'unrecognized') {
11085
await handleSomethingRunningOnPort();
11186
}
11287

88+
console.log('----');
89+
11390
let reportEvent: ((event: any) => void) | undefined;
11491
const terminal = new Terminal(process.stdout);
11592
const ReporterImpl = getReporterImpl(args.customLogReporterPath);

packages/cli-plugin-metro/src/tools/askForPortChange.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.

packages/cli-plugin-metro/src/tools/askForProcessKill.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

packages/cli-plugin-metro/src/tools/getProcessIdFromPort.ts

Lines changed: 0 additions & 27 deletions
This file was deleted.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)