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