1import { DeviceEventEmitter, NativeModules, EventSubscription } from 'react-native'; 2 3export type AppInfo = { 4 appIcon?: string; 5 appVersion?: string; 6 hostUrl?: string; 7 appName?: string; 8 sdkVersion?: string; 9 runtimeVersion?: string; 10}; 11 12export type DevSettings = { 13 isDebuggingRemotely?: boolean; 14 isElementInspectorShown?: boolean; 15 isHotLoadingEnabled?: boolean; 16 isPerfMonitorShown?: boolean; 17 isRemoteDebuggingAvailable?: boolean; 18 isElementInspectorAvailable?: boolean; 19 isHotLoadingAvailable?: boolean; 20 isPerfMonitorAvailable?: boolean; 21}; 22 23export type MenuPreferences = { 24 isOnboardingFinished?: boolean; 25}; 26 27const DevMenu = NativeModules.ExpoDevMenuInternal; 28 29export async function dispatchCallableAsync( 30 callableId: string, 31 args: object | null = null 32): Promise<void> { 33 return await DevMenu.dispatchCallableAsync(callableId, args); 34} 35 36export function hideMenu(): void { 37 DevMenu.hideMenu(); 38} 39 40export function subscribeToCloseEvents(listener: () => void): EventSubscription { 41 return DeviceEventEmitter.addListener('closeDevMenu', listener); 42} 43 44export function subscribeToOpenEvents(listener: () => void): EventSubscription { 45 return DeviceEventEmitter.addListener('openDevMenu', listener); 46} 47 48export function openDevMenuFromReactNative() { 49 DevMenu.openDevMenuFromReactNative(); 50} 51 52export async function navigateToLauncherAsync(): Promise<void> { 53 return await dispatchCallableAsync('backToLauncher'); 54} 55 56export async function togglePerformanceMonitorAsync() { 57 return await dispatchCallableAsync('performance-monitor'); 58} 59 60export async function toggleElementInspectorAsync() { 61 return await dispatchCallableAsync('inspector'); 62} 63 64export async function reloadAsync() { 65 return await dispatchCallableAsync('reload'); 66} 67 68export async function toggleDebugRemoteJSAsync() { 69 return await dispatchCallableAsync('remote-debug'); 70} 71 72export async function toggleFastRefreshAsync() { 73 return await dispatchCallableAsync('fast-refresh'); 74} 75 76export async function copyToClipboardAsync(content: string) { 77 return await DevMenu.copyToClipboardAsync(content); 78} 79 80export async function setOnboardingFinishedAsync(isFinished: boolean) { 81 return await DevMenu.setOnboardingFinished(isFinished); 82} 83