Skip to content

Commit fc9457e

Browse files
authored
fix: does not override user-defined reporter (#2024)
1 parent 3032c87 commit fc9457e

File tree

2 files changed

+31
-43
lines changed

2 files changed

+31
-43
lines changed

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

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
import Metro from 'metro';
9+
import type {Reporter, ReportableEvent} from 'metro';
910
import type Server from 'metro/src/Server';
1011
import type {Middleware} from 'metro-config';
1112
import {Terminal} from 'metro-core';
@@ -40,19 +41,6 @@ export type Args = {
4041
};
4142

4243
async function runServer(_argv: Array<string>, ctx: Config, args: Args) {
43-
let reportEvent: ((event: any) => void) | undefined;
44-
const terminal = new Terminal(process.stdout);
45-
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
46-
const terminalReporter = new ReporterImpl(terminal);
47-
const reporter = {
48-
update(event: any) {
49-
terminalReporter.update(event);
50-
if (reportEvent) {
51-
reportEvent(event);
52-
}
53-
},
54-
};
55-
5644
const metroConfig = await loadMetroConfig(ctx, {
5745
config: args.config,
5846
maxWorkers: args.maxWorkers,
@@ -61,8 +49,14 @@ async function runServer(_argv: Array<string>, ctx: Config, args: Args) {
6149
watchFolders: args.watchFolders,
6250
projectRoot: args.projectRoot,
6351
sourceExts: args.sourceExts,
64-
reporter,
6552
});
53+
// if customLogReporterPath is provided, use the custom reporter, otherwise use the default one
54+
let reporter: Reporter = metroConfig.reporter;
55+
if (args.customLogReporterPath) {
56+
const terminal = new Terminal(process.stdout);
57+
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
58+
reporter = new ReporterImpl(terminal);
59+
}
6660

6761
if (args.assetPlugins) {
6862
// @ts-ignore - assigning to readonly property
@@ -95,16 +89,26 @@ async function runServer(_argv: Array<string>, ctx: Config, args: Args) {
9589
return middleware.use(metroMiddleware);
9690
};
9791

98-
const serverInstance = await Metro.runServer(metroConfig, {
99-
host: args.host,
100-
secure: args.https,
101-
secureCert: args.cert,
102-
secureKey: args.key,
103-
// @ts-ignore - ws.Server types are incompatible
104-
websocketEndpoints,
105-
});
106-
107-
reportEvent = eventsSocketEndpoint.reportEvent;
92+
const serverInstance = await Metro.runServer(
93+
{
94+
...metroConfig,
95+
reporter: {
96+
update(event: ReportableEvent) {
97+
reporter.update(event);
98+
// Add reportEvent to the reporter update method.
99+
eventsSocketEndpoint.reportEvent(event);
100+
},
101+
},
102+
},
103+
{
104+
host: args.host,
105+
secure: args.https,
106+
secureCert: args.cert,
107+
secureKey: args.key,
108+
// @ts-ignore - ws.Server types are incompatible
109+
websocketEndpoints,
110+
},
111+
);
108112

109113
if (args.interactive) {
110114
enableWatchMode(messageSocketEndpoint, ctx);
@@ -125,10 +129,7 @@ async function runServer(_argv: Array<string>, ctx: Config, args: Args) {
125129
await version.logIfUpdateAvailable(ctx.root);
126130
}
127131

128-
function getReporterImpl(customLogReporterPath: string | undefined) {
129-
if (customLogReporterPath === undefined) {
130-
return require('metro/src/lib/TerminalReporter');
131-
}
132+
function getReporterImpl(customLogReporterPath: string) {
132133
try {
133134
// First we let require resolve it, so we can require packages in node_modules
134135
// as expected. eg: require('my-package/reporter');

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

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
mergeConfig,
77
resolveConfig,
88
ResolverConfigT,
9+
YargArguments,
910
} from 'metro-config';
1011
import {CLIError, logger} from '@react-native-community/cli-tools';
1112
import type {Config} from '@react-native-community/cli-types';
@@ -66,17 +67,6 @@ function getOverrideConfig(ctx: ConfigLoadingContext): InputConfigT {
6667
};
6768
}
6869

69-
export interface ConfigOptionsT {
70-
maxWorkers?: number;
71-
port?: number;
72-
projectRoot?: string;
73-
resetCache?: boolean;
74-
watchFolders?: string[];
75-
sourceExts?: string[];
76-
reporter?: any;
77-
config?: string;
78-
}
79-
8070
/**
8171
* Load Metro config.
8272
*
@@ -85,12 +75,9 @@ export interface ConfigOptionsT {
8575
*/
8676
export default async function loadMetroConfig(
8777
ctx: ConfigLoadingContext,
88-
options: ConfigOptionsT = {},
78+
options: YargArguments = {},
8979
): Promise<ConfigT> {
9080
const overrideConfig = getOverrideConfig(ctx);
91-
if (options.reporter) {
92-
overrideConfig.reporter = options.reporter;
93-
}
9481

9582
const cwd = ctx.root;
9683
const projectConfig = await resolveConfig(options.config, cwd);

0 commit comments

Comments
 (0)