-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
createDebugMiddleware.ts
44 lines (38 loc) · 1.6 KB
/
createDebugMiddleware.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import chalk from 'chalk';
import { createInspectorDeviceClass } from './InspectorDevice';
import { createInspectorProxyClass } from './InspectorProxy';
import { Log } from '../../../../log';
import { type MetroBundlerDevServer } from '../MetroBundlerDevServer';
export function createDebugMiddleware(metroBundler: MetroBundlerDevServer) {
// Load the React Native debugging tools from project
// TODO: check if this works with isolated modules
const { createDevMiddleware, unstable_Device, unstable_InspectorProxy } =
require('@react-native/dev-middleware') as typeof import('@react-native/dev-middleware');
// Create the extended inspector proxy, using our own device class
const ExpoInspectorProxy = createInspectorProxyClass(
unstable_InspectorProxy,
createInspectorDeviceClass(metroBundler, unstable_Device)
);
const { middleware, websocketEndpoints } = createDevMiddleware({
projectRoot: metroBundler.projectRoot,
serverBaseUrl: metroBundler.getUrlCreator().constructUrl({ scheme: 'http', hostType: 'lan' }),
logger: createLogger(chalk.bold('Debug:')),
unstable_InspectorProxy: ExpoInspectorProxy,
unstable_experiments: {
enableNewDebugger: true,
},
});
return {
debugMiddleware: middleware,
debugWebsocketEndpoints: websocketEndpoints,
};
}
function createLogger(
logPrefix: string
): Parameters<typeof import('@react-native/dev-middleware').createDevMiddleware>[0]['logger'] {
return {
info: (...args) => Log.log(logPrefix, ...args),
warn: (...args) => Log.warn(logPrefix, ...args),
error: (...args) => Log.error(logPrefix, ...args),
};
}