1import { MetroBundlerDevServer } from '../MetroBundlerDevServer';
2import {
3  importMetroInspectorDeviceFromProject,
4  importMetroInspectorProxyFromProject,
5} from '../resolveFromProject';
6import { createInspectorDeviceClass } from './device';
7import { ExpoInspectorProxy } from './proxy';
8
9export { ExpoInspectorProxy } from './proxy';
10
11const debug = require('debug')('expo:metro:inspector-proxy') as typeof console.log;
12
13export function createInspectorProxy(metroBundler: MetroBundlerDevServer, projectRoot: string) {
14  debug('Expo inspector proxy enabled');
15
16  // Import the installed `metro-inspector-proxy` from the project
17  // We use these base classes to extend functionality
18  const { InspectorProxy: MetroInspectorProxy } = importMetroInspectorProxyFromProject(projectRoot);
19  // The device is slightly more complicated, we need to extend that class
20  const ExpoInspectorDevice = createInspectorDeviceClass(
21    metroBundler,
22    importMetroInspectorDeviceFromProject(projectRoot)
23  );
24
25  const inspectorProxy = new ExpoInspectorProxy(
26    new MetroInspectorProxy(projectRoot),
27    ExpoInspectorDevice
28  );
29
30  return inspectorProxy;
31}
32