@react-native/debugger-frontend
Version:
Debugger frontend for React Native based on Chrome DevTools
25 lines (24 loc) • 38.4 kB
JavaScript
import"../shell/shell.js";import*as e from"../../core/common/common.js";import*as t from"../../core/i18n/i18n.js";import*as o from"../../core/root/root.js";import*as i from"../../ui/legacy/legacy.js";import*as n from"../../core/sdk/sdk.js";import*as a from"../../models/issues_manager/issues_manager.js";import*as r from"../../models/extensions/extensions.js";import*as s from"../../models/workspace/workspace.js";import*as l from"../../panels/network/forward/forward.js";import*as c from"../../core/host/host.js";import*as d from"../../core/rn_experiments/rn_experiments.js";import*as g from"../main/main.js";import*as u from"../../ui/lit/lit.js";import*as m from"../../ui/visual_logging/visual_logging.js";const w={toggleDeviceToolbar:"Toggle device toolbar",captureScreenshot:"Capture screenshot",captureFullSizeScreenshot:"Capture full size screenshot",captureNodeScreenshot:"Capture node screenshot",showMediaQueries:"Show media queries",device:"device",hideMediaQueries:"Hide media queries",showRulers:"Show rulers in the Device Mode toolbar",hideRulers:"Hide rulers in the Device Mode toolbar",showDeviceFrame:"Show device frame",hideDeviceFrame:"Hide device frame"},p=t.i18n.registerUIStrings("panels/emulation/emulation-meta.ts",w),v=t.i18n.getLazilyComputedLocalizedString.bind(void 0,p);let h;async function y(){return h||(h=await import("../../panels/emulation/emulation.js")),h}i.ActionRegistration.registerActionExtension({category:"MOBILE",actionId:"emulation.toggle-device-mode",toggleable:!0,loadActionDelegate:async()=>new((await y()).DeviceModeWrapper.ActionDelegate),condition:o.Runtime.conditions.canDock,title:v(w.toggleDeviceToolbar),iconClass:"devices",bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+M"},{platform:"mac",shortcut:"Shift+Meta+M"}]}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-screenshot",category:"SCREENSHOT",loadActionDelegate:async()=>new((await y()).DeviceModeWrapper.ActionDelegate),condition:o.Runtime.conditions.canDock,title:v(w.captureScreenshot)}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-full-height-screenshot",category:"SCREENSHOT",loadActionDelegate:async()=>new((await y()).DeviceModeWrapper.ActionDelegate),condition:o.Runtime.conditions.canDock,title:v(w.captureFullSizeScreenshot)}),i.ActionRegistration.registerActionExtension({actionId:"emulation.capture-node-screenshot",category:"SCREENSHOT",loadActionDelegate:async()=>new((await y()).DeviceModeWrapper.ActionDelegate),condition:o.Runtime.conditions.canDock,title:v(w.captureNodeScreenshot)}),e.Settings.registerSettingExtension({category:"MOBILE",settingName:"show-media-query-inspector",settingType:"boolean",defaultValue:!1,options:[{value:!0,title:v(w.showMediaQueries)},{value:!1,title:v(w.hideMediaQueries)}],tags:[v(w.device)]}),e.Settings.registerSettingExtension({category:"MOBILE",settingName:"emulation.show-rulers",settingType:"boolean",defaultValue:!1,options:[{value:!0,title:v(w.showRulers)},{value:!1,title:v(w.hideRulers)}],tags:[v(w.device)]}),e.Settings.registerSettingExtension({category:"MOBILE",settingName:"emulation.show-device-outline",settingType:"boolean",defaultValue:!1,options:[{value:!0,title:v(w.showDeviceFrame)},{value:!1,title:v(w.hideDeviceFrame)}],tags:[v(w.device)]}),i.Toolbar.registerToolbarItem({actionId:"emulation.toggle-device-mode",condition:o.Runtime.conditions.canDock,location:"main-toolbar-left",order:1,loadItem:void 0,separator:void 0}),e.AppProvider.registerAppProvider({loadAppProvider:async()=>(await y()).AdvancedApp.AdvancedAppProvider.instance(),condition:o.Runtime.conditions.canDock,order:0}),i.ContextMenu.registerItem({location:"deviceModeMenu/save",order:12,actionId:"emulation.capture-screenshot"}),i.ContextMenu.registerItem({location:"deviceModeMenu/save",order:13,actionId:"emulation.capture-full-height-screenshot"});const R={sensors:"Sensors",geolocation:"geolocation",timezones:"timezones",locale:"locale",locales:"locales",accelerometer:"accelerometer",deviceOrientation:"device orientation",locations:"Locations",touch:"Touch",devicebased:"Device-based",forceEnabled:"Force enabled",emulateIdleDetectorState:"Emulate Idle Detector state",noIdleEmulation:"No idle emulation",userActiveScreenUnlocked:"User active, screen unlocked",userActiveScreenLocked:"User active, screen locked",userIdleScreenUnlocked:"User idle, screen unlocked",userIdleScreenLocked:"User idle, screen locked",showSensors:"Show Sensors",showLocations:"Show Locations",cpuPressure:"CPU Pressure",noPressureEmulation:"No override",nominal:"Nominal",fair:"Fair",serious:"Serious",critical:"Critical"},f=t.i18n.registerUIStrings("panels/sensors/sensors-meta.ts",R),b=t.i18n.getLazilyComputedLocalizedString.bind(void 0,f);let k;async function S(){return k||(k=await import("../../panels/sensors/sensors.js")),k}i.ViewManager.registerViewExtension({location:"drawer-view",commandPrompt:b(R.showSensors),title:b(R.sensors),id:"sensors",persistence:"closeable",order:100,loadView:async()=>new((await S()).SensorsView.SensorsView),tags:[b(R.geolocation),b(R.timezones),b(R.locale),b(R.locales),b(R.accelerometer),b(R.deviceOrientation)]}),i.ViewManager.registerViewExtension({location:"settings-view",id:"emulation-locations",commandPrompt:b(R.showLocations),title:b(R.locations),order:40,loadView:async()=>new((await S()).LocationsSettingsTab.LocationsSettingsTab),settings:["emulation.locations"],iconName:"location-on"}),e.Settings.registerSettingExtension({storageType:"Synced",settingName:"emulation.locations",settingType:"array",defaultValue:[{title:"Berlin",lat:52.520007,long:13.404954,timezoneId:"Europe/Berlin",locale:"de-DE"},{title:"London",lat:51.507351,long:-.127758,timezoneId:"Europe/London",locale:"en-GB"},{title:"Moscow",lat:55.755826,long:37.6173,timezoneId:"Europe/Moscow",locale:"ru-RU"},{title:"Mountain View",lat:37.386052,long:-122.083851,timezoneId:"America/Los_Angeles",locale:"en-US"},{title:"Mumbai",lat:19.075984,long:72.877656,timezoneId:"Asia/Kolkata",locale:"mr-IN"},{title:"San Francisco",lat:37.774929,long:-122.419416,timezoneId:"America/Los_Angeles",locale:"en-US"},{title:"Shanghai",lat:31.230416,long:121.473701,timezoneId:"Asia/Shanghai",locale:"zh-Hans-CN"},{title:"São Paulo",lat:-23.55052,long:-46.633309,timezoneId:"America/Sao_Paulo",locale:"pt-BR"},{title:"Tokyo",lat:35.689487,long:139.691706,timezoneId:"Asia/Tokyo",locale:"ja-JP"}]}),e.Settings.registerSettingExtension({title:b(R.cpuPressure),reloadRequired:!0,settingName:"emulation.cpu-pressure",settingType:"enum",defaultValue:"none",options:[{value:"none",title:b(R.noPressureEmulation),text:b(R.noPressureEmulation)},{value:"nominal",title:b(R.nominal),text:b(R.nominal)},{value:"fair",title:b(R.fair),text:b(R.fair)},{value:"serious",title:b(R.serious),text:b(R.serious)},{value:"critical",title:b(R.critical),text:b(R.critical)}]}),e.Settings.registerSettingExtension({title:b(R.touch),reloadRequired:!0,settingName:"emulation.touch",settingType:"enum",defaultValue:"none",options:[{value:"none",title:b(R.devicebased),text:b(R.devicebased)},{value:"force",title:b(R.forceEnabled),text:b(R.forceEnabled)}]}),e.Settings.registerSettingExtension({title:b(R.emulateIdleDetectorState),settingName:"emulation.idle-detection",settingType:"enum",defaultValue:"none",options:[{value:"none",title:b(R.noIdleEmulation),text:b(R.noIdleEmulation)},{value:'{"isUserActive":true,"isScreenUnlocked":true}',title:b(R.userActiveScreenUnlocked),text:b(R.userActiveScreenUnlocked)},{value:'{"isUserActive":true,"isScreenUnlocked":false}',title:b(R.userActiveScreenLocked),text:b(R.userActiveScreenLocked)},{value:'{"isUserActive":false,"isScreenUnlocked":true}',title:b(R.userIdleScreenUnlocked),text:b(R.userIdleScreenUnlocked)},{value:'{"isUserActive":false,"isScreenUnlocked":false}',title:b(R.userIdleScreenLocked),text:b(R.userIdleScreenLocked)}]});const T={developerResources:"Developer resources",showDeveloperResources:"Show Developer resources"},A=t.i18n.registerUIStrings("panels/developer_resources/developer_resources-meta.ts",T),E=t.i18n.getLazilyComputedLocalizedString.bind(void 0,A);let N;async function P(){return N||(N=await import("../../panels/developer_resources/developer_resources.js")),N}i.ViewManager.registerViewExtension({location:"drawer-view",id:"developer-resources",title:E(T.developerResources),commandPrompt:E(T.showDeveloperResources),order:100,persistence:"closeable",loadView:async()=>new((await P()).DeveloperResourcesView.DeveloperResourcesView)}),e.Revealer.registerRevealer({contextTypes:()=>[n.PageResourceLoader.ResourceKey],destination:e.Revealer.RevealerDestination.DEVELOPER_RESOURCES_PANEL,loadRevealer:async()=>new((await P()).DeveloperResourcesView.DeveloperResourcesRevealer)});const x={rendering:"Rendering",showRendering:"Show Rendering",paint:"paint",layout:"layout",fps:"fps",cssMediaType:"CSS media type",cssMediaFeature:"CSS media feature",visionDeficiency:"vision deficiency",colorVisionDeficiency:"color vision deficiency",reloadPage:"Reload page",hardReloadPage:"Hard reload page",forceAdBlocking:"Force ad blocking on this site",blockAds:"Block ads on this site",showAds:"Show ads on this site, if allowed",autoOpenDevTools:"Auto-open DevTools for popups",doNotAutoOpen:"Do not auto-open DevTools for popups",disablePaused:"Disable paused state overlay",toggleCssPrefersColorSchemeMedia:"Toggle CSS media feature prefers-color-scheme"},I=t.i18n.registerUIStrings("entrypoints/inspector_main/inspector_main-meta.ts",x),D=t.i18n.getLazilyComputedLocalizedString.bind(void 0,I);let M;async function L(){return M||(M=await import("../inspector_main/inspector_main.js")),M}i.ViewManager.registerViewExtension({location:"drawer-view",id:"rendering",title:D(x.rendering),commandPrompt:D(x.showRendering),persistence:"closeable",order:50,loadView:async()=>new((await L()).RenderingOptions.RenderingOptionsView),tags:[D(x.paint),D(x.layout),D(x.fps),D(x.cssMediaType),D(x.cssMediaFeature),D(x.visionDeficiency),D(x.colorVisionDeficiency)]}),i.ActionRegistration.registerActionExtension({category:"NAVIGATION",actionId:"inspector-main.reload",loadActionDelegate:async()=>new((await L()).InspectorMain.ReloadActionDelegate),iconClass:"refresh",title:D(x.reloadPage),bindings:[{platform:"windows,linux",shortcut:"Ctrl+R"},{platform:"windows,linux",shortcut:"F5"},{platform:"mac",shortcut:"Meta+R"}]}),i.ActionRegistration.registerActionExtension({category:"NAVIGATION",actionId:"inspector-main.hard-reload",loadActionDelegate:async()=>new((await L()).InspectorMain.ReloadActionDelegate),title:D(x.hardReloadPage),bindings:[{platform:"windows,linux",shortcut:"Shift+Ctrl+R"},{platform:"windows,linux",shortcut:"Shift+F5"},{platform:"windows,linux",shortcut:"Ctrl+F5"},{platform:"windows,linux",shortcut:"Ctrl+Shift+F5"},{platform:"mac",shortcut:"Shift+Meta+R"}]}),i.ActionRegistration.registerActionExtension({actionId:"rendering.toggle-prefers-color-scheme",category:"RENDERING",title:D(x.toggleCssPrefersColorSchemeMedia),loadActionDelegate:async()=>new((await L()).RenderingOptions.ReloadActionDelegate)}),e.Settings.registerSettingExtension({category:"",title:D(x.forceAdBlocking),settingName:"network.ad-blocking-enabled",settingType:"boolean",storageType:"Session",defaultValue:!1,options:[{value:!0,title:D(x.blockAds)},{value:!1,title:D(x.showAds)}]}),e.Settings.registerSettingExtension({category:"GLOBAL",storageType:"Synced",title:D(x.autoOpenDevTools),settingName:"auto-attach-to-created-pages",settingType:"boolean",order:2,defaultValue:!1,options:[{value:!0,title:D(x.autoOpenDevTools)},{value:!1,title:D(x.doNotAutoOpen)}]}),e.Settings.registerSettingExtension({category:"APPEARANCE",storageType:"Synced",title:D(x.disablePaused),settingName:"disable-paused-state-overlay",settingType:"boolean",defaultValue:!1}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await L()).InspectorMain.NodeIndicator.instance(),order:2,location:"main-toolbar-left"}),i.Toolbar.registerToolbarItem({loadItem:async()=>(await L()).OutermostTargetSelector.OutermostTargetSelector.instance(),order:98,location:"main-toolbar-right"});const C={issues:"Issues",showIssues:"Show Issues"},V=t.i18n.registerUIStrings("panels/issues/issues-meta.ts",C),F=t.i18n.getLazilyComputedLocalizedString.bind(void 0,V);let U;async function O(){return U||(U=await import("../../panels/issues/issues.js")),U}i.ViewManager.registerViewExtension({location:"drawer-view",id:"issues-pane",title:F(C.issues),commandPrompt:F(C.showIssues),order:100,persistence:"closeable",loadView:async()=>new((await O()).IssuesPane.IssuesPane)}),e.Revealer.registerRevealer({contextTypes:()=>[a.Issue.Issue],destination:e.Revealer.RevealerDestination.ISSUES_VIEW,loadRevealer:async()=>new((await O()).IssueRevealer.IssueRevealer)});const _={throttling:"Throttling",showThrottling:"Show Throttling",goOffline:"Go offline",device:"device",throttlingTag:"throttling",enableSlowGThrottling:"Enable slow `3G` throttling",enableFastGThrottling:"Enable fast `3G` throttling",goOnline:"Go online"},z=t.i18n.registerUIStrings("panels/mobile_throttling/mobile_throttling-meta.ts",_),B=t.i18n.getLazilyComputedLocalizedString.bind(void 0,z);let W;async function q(){return W||(W=await import("../../panels/mobile_throttling/mobile_throttling.js")),W}i.ViewManager.registerViewExtension({location:"settings-view",id:"throttling-conditions",title:B(_.throttling),commandPrompt:B(_.showThrottling),order:35,loadView:async()=>new((await q()).ThrottlingSettingsTab.ThrottlingSettingsTab),settings:["custom-network-conditions","calibrated-cpu-throttling"],iconName:"performance"}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-offline",category:"NETWORK",title:B(_.goOffline),loadActionDelegate:async()=>new((await q()).ThrottlingManager.ActionDelegate),tags:[B(_.device),B(_.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-low-end-mobile",category:"NETWORK",title:B(_.enableSlowGThrottling),loadActionDelegate:async()=>new((await q()).ThrottlingManager.ActionDelegate),tags:[B(_.device),B(_.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-mid-tier-mobile",category:"NETWORK",title:B(_.enableFastGThrottling),loadActionDelegate:async()=>new((await q()).ThrottlingManager.ActionDelegate),tags:[B(_.device),B(_.throttlingTag)]}),i.ActionRegistration.registerActionExtension({actionId:"network-conditions.network-online",category:"NETWORK",title:B(_.goOnline),loadActionDelegate:async()=>new((await q()).ThrottlingManager.ActionDelegate),tags:[B(_.device),B(_.throttlingTag)]}),e.Settings.registerSettingExtension({storageType:"Synced",settingName:"custom-network-conditions",settingType:"array",defaultValue:[]});const j={showNetwork:"Show Network",network:"Network",networkExpoUnstable:"Expo Network",showNetworkRequestBlocking:"Show Network request blocking",networkRequestBlocking:"Network request blocking",showNetworkConditions:"Show Network conditions",networkConditions:"Network conditions",diskCache:"disk cache",networkThrottling:"network throttling",showSearch:"Show Search",search:"Search",recordNetworkLog:"Record network log",stopRecordingNetworkLog:"Stop recording network log",hideRequestDetails:"Hide request details",colorcodeResourceTypes:"Color-code resource types",colorCode:"color code",resourceType:"resource type",colorCodeByResourceType:"Color code by resource type",useDefaultColors:"Use default colors",groupNetworkLogByFrame:"Group network log by frame",netWork:"network",frame:"frame",group:"group",groupNetworkLogItemsByFrame:"Group network log items by frame",dontGroupNetworkLogItemsByFrame:"Don't group network log items by frame",clear:"Clear network log",addNetworkRequestBlockingPattern:"Add network request blocking pattern",removeAllNetworkRequestBlockingPatterns:"Remove all network request blocking patterns",allowToGenerateHarWithSensitiveData:"Allow to generate `HAR` with sensitive data",dontAllowToGenerateHarWithSensitiveData:"Don't allow to generate `HAR` with sensitive data",allowToGenerateHarWithSensitiveDataDocumentation:"By default generated HAR logs are sanitized and don't include `Cookie`, `Set-Cookie`, or `Authorization` HTTP headers. When this setting is enabled, options to export/copy HAR with sensitive data are provided."},H=t.i18n.registerUIStrings("panels/network/network-meta.ts",j),G=t.i18n.getLazilyComputedLocalizedString.bind(void 0,H),K=t.i18n.getLocalizedString.bind(void 0,H);let Q;async function Y(){return Q||(Q=await import("../../panels/network/network.js")),Q}function $(e){return void 0===Q?[]:e(Q)}i.ViewManager.registerViewExtension({location:"panel",id:"network",commandPrompt:G(j.showNetwork),title:()=>o.Runtime.conditions.reactNativeExpoNetworkPanel()?K(j.networkExpoUnstable):K(j.network),order:40,loadView:async()=>(await Y()).NetworkPanel.NetworkPanel.instance()}),i.ViewManager.registerViewExtension({location:"drawer-view",id:"network.blocked-urls",commandPrompt:G(j.showNetworkRequestBlocking),title:G(j.networkRequestBlocking),persistence:"closeable",order:60,loadView:async()=>new((await Y()).BlockedURLsPane.BlockedURLsPane)}),i.ViewManager.registerViewExtension({location:"drawer-view",id:"network.config",commandPrompt:G(j.showNetworkConditions),title:G(j.networkConditions),persistence:"closeable",order:40,tags:[G(j.diskCache),G(j.networkThrottling),t.i18n.lockedLazyString("useragent"),t.i18n.lockedLazyString("user agent"),t.i18n.lockedLazyString("user-agent")],loadView:async()=>(await Y()).NetworkConfigView.NetworkConfigView.instance()}),i.ViewManager.registerViewExtension({location:"network-sidebar",id:"network.search-network-tab",commandPrompt:G(j.showSearch),title:G(j.search),persistence:"permanent",loadView:async()=>(await Y()).NetworkPanel.SearchNetworkView.instance()}),i.ActionRegistration.registerActionExtension({actionId:"network.toggle-recording",category:"NETWORK",iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>$((e=>[e.NetworkPanel.NetworkPanel])),loadActionDelegate:async()=>new((await Y()).NetworkPanel.ActionDelegate),options:[{value:!0,title:G(j.recordNetworkLog)},{value:!1,title:G(j.stopRecordingNetworkLog)}],bindings:[{shortcut:"Ctrl+E",platform:"windows,linux"},{shortcut:"Meta+E",platform:"mac"}]}),i.ActionRegistration.registerActionExtension({actionId:"network.clear",category:"NETWORK",title:G(j.clear),iconClass:"clear",loadActionDelegate:async()=>new((await Y()).NetworkPanel.ActionDelegate),contextTypes:()=>$((e=>[e.NetworkPanel.NetworkPanel])),bindings:[{shortcut:"Ctrl+L"},{shortcut:"Meta+K",platform:"mac"}]}),i.ActionRegistration.registerActionExtension({actionId:"network.hide-request-details",category:"NETWORK",title:G(j.hideRequestDetails),contextTypes:()=>$((e=>[e.NetworkPanel.NetworkPanel])),loadActionDelegate:async()=>new((await Y()).NetworkPanel.ActionDelegate),bindings:[{shortcut:"Esc"}]}),i.ActionRegistration.registerActionExtension({actionId:"network.search",category:"NETWORK",title:G(j.search),contextTypes:()=>$((e=>[e.NetworkPanel.NetworkPanel])),loadActionDelegate:async()=>new((await Y()).NetworkPanel.ActionDelegate),bindings:[{platform:"mac",shortcut:"Meta+F",keybindSets:["devToolsDefault","vsCode"]},{platform:"windows,linux",shortcut:"Ctrl+F",keybindSets:["devToolsDefault","vsCode"]}]}),i.ActionRegistration.registerActionExtension({actionId:"network.add-network-request-blocking-pattern",category:"NETWORK",title:G(j.addNetworkRequestBlockingPattern),iconClass:"plus",contextTypes:()=>$((e=>[e.BlockedURLsPane.BlockedURLsPane])),loadActionDelegate:async()=>new((await Y()).BlockedURLsPane.ActionDelegate)}),i.ActionRegistration.registerActionExtension({actionId:"network.remove-all-network-request-blocking-patterns",category:"NETWORK",title:G(j.removeAllNetworkRequestBlockingPatterns),iconClass:"clear",contextTypes:()=>$((e=>[e.BlockedURLsPane.BlockedURLsPane])),loadActionDelegate:async()=>new((await Y()).BlockedURLsPane.ActionDelegate)}),e.Settings.registerSettingExtension({category:"NETWORK",storageType:"Synced",title:G(j.allowToGenerateHarWithSensitiveData),settingName:"network.show-options-to-generate-har-with-sensitive-data",settingType:"boolean",defaultValue:!1,tags:[t.i18n.lockedLazyString("HAR")],options:[{value:!0,title:G(j.allowToGenerateHarWithSensitiveData)},{value:!1,title:G(j.dontAllowToGenerateHarWithSensitiveData)}],learnMore:{url:"https://goo.gle/devtools-export-hars",tooltip:G(j.allowToGenerateHarWithSensitiveDataDocumentation)}}),e.Settings.registerSettingExtension({category:"NETWORK",storageType:"Synced",title:G(j.colorcodeResourceTypes),settingName:"network-color-code-resource-types",settingType:"boolean",defaultValue:!1,tags:[G(j.colorCode),G(j.resourceType)],options:[{value:!0,title:G(j.colorCodeByResourceType)},{value:!1,title:G(j.useDefaultColors)}]}),e.Settings.registerSettingExtension({category:"NETWORK",storageType:"Synced",title:G(j.groupNetworkLogByFrame),settingName:"network.group-by-frame",settingType:"boolean",defaultValue:!1,tags:[G(j.netWork),G(j.frame),G(j.group)],options:[{value:!0,title:G(j.groupNetworkLogItemsByFrame)},{value:!1,title:G(j.dontGroupNetworkLogItemsByFrame)}]}),i.ViewManager.registerLocationResolver({name:"network-sidebar",category:"NETWORK",loadResolver:async()=>(await Y()).NetworkPanel.NetworkPanel.instance()}),i.ContextMenu.registerProvider({contextTypes:()=>[n.NetworkRequest.NetworkRequest,n.Resource.Resource,s.UISourceCode.UISourceCode,n.TraceObject.RevealableNetworkRequest],loadProvider:async()=>(await Y()).NetworkPanel.NetworkPanel.instance(),experiment:void 0}),e.Revealer.registerRevealer({contextTypes:()=>[n.NetworkRequest.NetworkRequest],destination:e.Revealer.RevealerDestination.NETWORK_PANEL,loadRevealer:async()=>new((await Y()).NetworkPanel.RequestRevealer)}),e.Revealer.registerRevealer({contextTypes:()=>[l.UIRequestLocation.UIRequestLocation],destination:void 0,loadRevealer:async()=>new((await Y()).NetworkPanel.RequestLocationRevealer)}),e.Revealer.registerRevealer({contextTypes:()=>[l.NetworkRequestId.NetworkRequestId],destination:e.Revealer.RevealerDestination.NETWORK_PANEL,loadRevealer:async()=>new((await Y()).NetworkPanel.RequestIdRevealer)}),e.Revealer.registerRevealer({contextTypes:()=>[l.UIFilter.UIRequestFilter,r.ExtensionServer.RevealableNetworkRequestFilter],destination:e.Revealer.RevealerDestination.NETWORK_PANEL,loadRevealer:async()=>new((await Y()).NetworkPanel.NetworkLogWithFilterRevealer)});const J={title:"Components ⚛",command:"Show React DevTools Components panel"},X=t.i18n.registerUIStrings("panels/react_devtools/react_devtools_components-meta.ts",J),Z=t.i18n.getLazilyComputedLocalizedString.bind(void 0,X);let ee;i.ViewManager.registerViewExtension({location:"panel",id:"react-devtools-components",title:Z(J.title),commandPrompt:Z(J.command),persistence:"permanent",order:1e3,loadView:async()=>new((await async function(){return ee||(ee=await import("../../panels/react_devtools/react_devtools.js")),ee}()).ReactDevToolsComponentsView.ReactDevToolsComponentsViewImpl)});const te={title:"Profiler ⚛",command:"Show React DevTools Profiler panel"},oe=t.i18n.registerUIStrings("panels/react_devtools/react_devtools_profiler-meta.ts",te),ie=t.i18n.getLazilyComputedLocalizedString.bind(void 0,oe);let ne;i.ViewManager.registerViewExtension({location:"panel",id:"react-devtools-profiler",title:ie(te.title),commandPrompt:ie(te.command),persistence:"permanent",order:1e3,loadView:async()=>new((await async function(){return ne||(ne=await import("../../panels/react_devtools/react_devtools.js")),ne}()).ReactDevToolsProfilerView.ReactDevToolsProfilerViewImpl)});const ae={rnWelcome:"Welcome",showRnWelcome:"Show React Native Welcome panel",debuggerBrandName:"React Native DevTools"},re=t.i18n.registerUIStrings("panels/rn_welcome/rn_welcome-meta.ts",ae),se=t.i18n.getLazilyComputedLocalizedString.bind(void 0,re);let le;i.ViewManager.registerViewExtension({location:"panel",id:"rn-welcome",title:se(ae.rnWelcome),commandPrompt:se(ae.showRnWelcome),order:-10,persistence:"permanent",loadView:async()=>(await async function(){return le||(le=await import("../../panels/rn_welcome/rn_welcome.js")),le}()).RNWelcome.RNWelcomeImpl.instance({debuggerBrandName:se(ae.debuggerBrandName),showBetaLabel:!1,showDocs:!0}),experiment:"react-native-specific-ui"});const ce={performance:"Performance",showPerformance:"Show Performance",record:"Record",stop:"Stop",recordAndReload:"Record and reload",saveProfile:"Save profile…",loadProfile:"Load profile…",previousFrame:"Previous frame",nextFrame:"Next frame",showRecentTimelineSessions:"Show recent timeline sessions",previousRecording:"Previous recording",nextRecording:"Next recording",hideChromeFrameInLayersView:"Hide `chrome` frame in Layers view"},de=t.i18n.registerUIStrings("panels/timeline/timeline-meta.ts",ce),ge=t.i18n.getLazilyComputedLocalizedString.bind(void 0,de);let ue;async function me(){return ue||(ue=await import("../../panels/timeline/timeline.js")),ue}function we(e){return void 0===ue?[]:e(ue)}i.ViewManager.registerViewExtension({location:"panel",id:"timeline",title:ge(ce.performance),commandPrompt:ge(ce.showPerformance),order:50,loadView:async()=>(await me()).TimelinePanel.TimelinePanel.instance()}),i.ActionRegistration.registerActionExtension({actionId:"timeline.toggle-recording",category:"PERFORMANCE",iconClass:"record-start",toggleable:!0,toggledIconClass:"record-stop",toggleWithRedColor:!0,contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),options:[{value:!0,title:ge(ce.record)},{value:!1,title:ge(ce.stop)}],bindings:[{platform:"windows,linux",shortcut:"Ctrl+E"},{platform:"mac",shortcut:"Meta+E"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.record-reload",iconClass:"refresh",contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),category:"PERFORMANCE",title:ge(ce.recordAndReload),loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),bindings:[{platform:"windows,linux",shortcut:"Ctrl+Shift+E"},{platform:"mac",shortcut:"Meta+Shift+E"}],experiment:"!react-native-specific-ui"}),i.ActionRegistration.registerActionExtension({category:"PERFORMANCE",actionId:"timeline.save-to-file",contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),title:ge(ce.saveProfile),bindings:[{platform:"windows,linux",shortcut:"Ctrl+S"},{platform:"mac",shortcut:"Meta+S"}]}),i.ActionRegistration.registerActionExtension({category:"PERFORMANCE",actionId:"timeline.load-from-file",contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),title:ge(ce.loadProfile),bindings:[{platform:"windows,linux",shortcut:"Ctrl+O"},{platform:"mac",shortcut:"Meta+O"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.jump-to-previous-frame",category:"PERFORMANCE",title:ge(ce.previousFrame),contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),bindings:[{shortcut:"["}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.jump-to-next-frame",category:"PERFORMANCE",title:ge(ce.nextFrame),contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),bindings:[{shortcut:"]"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.show-history",loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),category:"PERFORMANCE",title:ge(ce.showRecentTimelineSessions),contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Ctrl+H"},{platform:"mac",shortcut:"Meta+Y"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.previous-recording",category:"PERFORMANCE",loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),title:ge(ce.previousRecording),contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Alt+Left"},{platform:"mac",shortcut:"Meta+Left"}]}),i.ActionRegistration.registerActionExtension({actionId:"timeline.next-recording",category:"PERFORMANCE",loadActionDelegate:async()=>new((await me()).TimelinePanel.ActionDelegate),title:ge(ce.nextRecording),contextTypes:()=>we((e=>[e.TimelinePanel.TimelinePanel])),bindings:[{platform:"windows,linux",shortcut:"Alt+Right"},{platform:"mac",shortcut:"Meta+Right"}]}),e.Settings.registerSettingExtension({category:"PERFORMANCE",storageType:"Synced",title:ge(ce.hideChromeFrameInLayersView),settingName:"frame-viewer-hide-chrome-window",settingType:"boolean",defaultValue:!1}),e.Settings.registerSettingExtension({category:"PERFORMANCE",storageType:"Synced",settingName:"annotations-hidden",settingType:"boolean",defaultValue:!1}),e.Linkifier.registerLinkifier({contextTypes:()=>we((e=>[e.CLSLinkifier.CLSRect])),loadLinkifier:async()=>(await me()).CLSLinkifier.Linkifier.instance()}),i.ContextMenu.registerItem({location:"timelineMenu/open",actionId:"timeline.load-from-file",order:10}),i.ContextMenu.registerItem({location:"timelineMenu/open",actionId:"timeline.save-to-file",order:15}),e.Revealer.registerRevealer({contextTypes:()=>[n.TraceObject.TraceObject],destination:e.Revealer.RevealerDestination.TIMELINE_PANEL,loadRevealer:async()=>new((await me()).TimelinePanel.TraceRevealer)}),e.Revealer.registerRevealer({contextTypes:()=>[n.TraceObject.RevealableEvent],destination:e.Revealer.RevealerDestination.TIMELINE_PANEL,loadRevealer:async()=>new((await me()).TimelinePanel.EventRevealer)});class pe{static#e;#t;#o;#i;constructor(){}static instance(){return this.#e||(this.#e=new pe),this.#e}setAppInfo(e,t){this.#t=e,this.#o=t,this.#n()}setSuffix(e){this.#i=e,this.#n()}#n(){const e=[];this.#t&&e.push(this.#t),this.#o&&e.push(`(${this.#o})`),this.#i&&e.push(this.#i),e.push("- React Native DevTools"),document.title=e.join(" ")}}const{html:ve,render:he}=u,ye={networkInspectionUnavailable:"Network inspection is unavailable",performanceProfilingUnavailable:"Performance profiling is unavailable",multiHostFeatureUnavailableTitle:"Feature is unavailable",multiHostFeatureDisabledDetail:"This feature is disabled as the app or framework has registered multiple React Native hosts, which is not currently supported."},Re=t.i18n.registerUIStrings("entrypoints/rn_fusebox/FuseboxFeatureObserver.ts",ye),fe=t.i18n.getLocalizedString.bind(void 0,Re),be=new Set(["network","timeline"]);const ke={connectionStatusDisconnectedTooltip:"Debugging connection was closed",connectionStatusDisconnectedLabel:"Reconnect DevTools"},Se=t.i18n.registerUIStrings("entrypoints/rn_fusebox/FuseboxReconnectDeviceButton.ts",ke),Te=t.i18n.getLazilyComputedLocalizedString.bind(void 0,Se);let Ae;class Ee extends n.TargetManager.Observer{#a=new i.Toolbar.ToolbarButton("");constructor(){super(),this.#a.setVisible(!1),this.#a.setGlyph("refresh"),this.#a.addEventListener("Click",this.#r.bind(this)),n.TargetManager.TargetManager.instance().observeTargets(this,{scoped:!0})}static instance(){return Ae||(Ae=new Ee),Ae}targetAdded(e){this.#s(e)}targetRemoved(e){this.#s(e)}#s(e){const t=n.TargetManager.TargetManager.instance().rootTarget();this.#a.setTitle(Te(ke.connectionStatusDisconnectedTooltip)()),this.#a.setText(Te(ke.connectionStatusDisconnectedLabel)()),this.#a.setVisible(!t),t||this.#l(e)}#l(t){e.Settings.Settings.instance().moduleSetting("preserve-console-log").get()||t.model(n.ConsoleModel.ConsoleModel)?.addMessage(new n.ConsoleModel.ConsoleMessage(t.model(n.RuntimeModel.RuntimeModel),"recommendation","info","[React Native] Console messages are currently cleared upon DevTools disconnection. You can preserve logs in settings: ",{type:n.ConsoleModel.FrontendMessageType.System,context:"fusebox_preserve_log_rec"}))}#r(){window.location.reload()}item(){return this.#a}}c.rnPerfMetrics.registerPerfMetricsGlobalPostMessageHandler(),c.rnPerfMetrics.registerGlobalErrorReporting(),c.rnPerfMetrics.setLaunchId(o.Runtime.Runtime.queryParam("launchId")),c.rnPerfMetrics.setAppId(o.Runtime.Runtime.queryParam("appId")),c.rnPerfMetrics.setTelemetryInfo(JSON.parse(o.Runtime.Runtime.queryParam("telemetryInfo")||"{}")),c.rnPerfMetrics.entryPointLoadingStarted("rn_fusebox");const Ne={networkTitle:"React Native",showReactNative:"Show React Native",sendFeedback:"[FB-only] Send feedback"},Pe=t.i18n.registerUIStrings("entrypoints/rn_fusebox/rn_fusebox.ts",Ne),xe=t.i18n.getLazilyComputedLocalizedString.bind(void 0,Pe);let Ie;if(i.ViewManager.maybeRemoveViewExtension("network.blocked-urls"),i.ViewManager.maybeRemoveViewExtension("network.config"),i.ViewManager.maybeRemoveViewExtension("coverage"),i.ViewManager.maybeRemoveViewExtension("linear-memory-inspector"),i.ViewManager.maybeRemoveViewExtension("rendering"),i.ViewManager.maybeRemoveViewExtension("issues-pane"),i.ViewManager.maybeRemoveViewExtension("sensors"),i.ViewManager.maybeRemoveViewExtension("devices"),i.ViewManager.maybeRemoveViewExtension("emulation-locations"),i.ViewManager.maybeRemoveViewExtension("throttling-conditions"),d.RNExperimentsImpl.setIsReactNativeEntryPoint(!0),d.RNExperimentsImpl.Instance.enableExperimentsByDefault(["js-heap-profiler-enable","react-native-specific-ui"]),document.addEventListener("visibilitychange",(()=>{c.rnPerfMetrics.browserVisibilityChanged(document.visibilityState)})),n.SDKModel.SDKModel.register(n.ReactNativeApplicationModel.ReactNativeApplicationModel,{capabilities:0,autostart:!0,early:!0}),i.ViewManager.registerViewExtension({location:"navigator-view",id:"navigator-network",title:xe(Ne.networkTitle),commandPrompt:xe(Ne.showReactNative),order:2,persistence:"permanent",loadView:async()=>(await async function(){return Ie||(Ie=await import("../../panels/sources/sources.js")),Ie}()).SourcesNavigator.NetworkNavigatorView.instance()}),self.runtime=o.Runtime.Runtime.instance({forceNew:!0}),new g.MainImpl.MainImpl,globalThis.FB_ONLY__reactNativeFeedbackLink){const e=globalThis.FB_ONLY__reactNativeFeedbackLink,t="react-native-send-feedback",o={handleAction:(o,i)=>i===t&&(c.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(e),!0)};i.ActionRegistration.registerActionExtension({category:"GLOBAL",actionId:t,title:xe(Ne.sendFeedback),loadActionDelegate:async()=>o,iconClass:"bug"}),i.Toolbar.registerToolbarItem({location:"main-toolbar-right",actionId:t,label:xe(Ne.sendFeedback)})}i.Toolbar.registerToolbarItem({location:"main-toolbar-right",loadItem:async()=>Ee.instance()}),new class{constructor(e){e.observeModels(n.ReactNativeApplicationModel.ReactNativeApplicationModel,this)}modelAdded(e){e.ensureEnabled(),e.addEventListener("MetadataUpdated",this.#c,this)}modelRemoved(e){e.removeEventListener("MetadataUpdated",this.#c,this)}#c(e){const{appDisplayName:t,deviceName:o}=e.data;pe.instance().setAppInfo(t,o)}}(n.TargetManager.TargetManager.instance()),new class{#d=!1;constructor(e){e.observeModels(n.ReactNativeApplicationModel.ReactNativeApplicationModel,this)}modelAdded(e){e.ensureEnabled(),e.addEventListener("MetadataUpdated",this.#c,this),e.addEventListener("SystemStateChanged",this.#g,this)}modelRemoved(e){e.removeEventListener("MetadataUpdated",this.#c,this),e.removeEventListener("SystemStateChanged",this.#g,this)}#c(e){const{unstable_isProfilingBuild:t,unstable_networkInspectionEnabled:i}=e.data;t&&(pe.instance().setSuffix("[PROFILING]"),this.#u()),i||o.Runtime.conditions.reactNativeExpoNetworkPanel()||this.#m()}#g(e){const{isSingleHost:t}=e.data;t||this.#w()}#u(){i.InspectorView.InspectorView.instance().closeDrawer();const e=i.ViewManager.ViewManager.instance(),t=e.resolveLocation("panel"),o=e.resolveLocation("drawer-view");Promise.all([t,o]).then((([e,t])=>{i.ViewManager.getRegisteredViewExtensions().forEach((o=>{if("drawer-view"===o.location())t?.removeView(o);else switch(o.viewId()){case"console":case"heap-profiler":case"live-heap-profile":case"sources":case"network":case"react-devtools-components":case"react-devtools-profiler":e?.removeView(o)}}))}))}#m(){const e=i.ViewManager.ViewManager.instance();e.resolveLocation("panel").then((t=>{t?.removeView(e.view("network"))}))}#w(){if(this.#d)return;const e=n.TargetManager.TargetManager.instance();for(const t of e.targets())t.networkAgent().invoke_disable();this.#p();const t=i.InspectorView.InspectorView.instance(),o=new Set,a=(e,t)=>{const o=fe("network"===t?ye.networkInspectionUnavailable:"timeline"===t?ye.performanceProfilingUnavailable:ye.multiHostFeatureUnavailableTitle);for(const t of e.element.children){const e=t;e.style.opacity="0.5",e.style.pointerEvents="none",e.setAttribute("inert",""),e.setAttribute("aria-hidden","true")}const i=document.createElement("div");he(ve`
<style>
.alert-bar {
background: var(--sys-color-tonal-container);
color: var(--sys-color-on-tonal-container);
padding: var(--sys-size-6) var(--sys-size-8);
border-bottom: 1px solid var(--sys-color-tonal-outline);
}
.alert-title {
font: var(--sys-typescale-body2-medium);
margin-bottom: var(--sys-size-3);
}
.alert-detail {
font: var(--sys-typescale-body4-regular);
}
</style>
<div class="alert-bar">
<div class="alert-title">${o}</div>
<div class="alert-detail">
${fe(ye.multiHostFeatureDisabledDetail)}
See <x-link href="https://github.com/react-native-community/discussions-and-proposals/discussions/954" class="devtools-link" jslog=${m.link().track({click:!0,keydown:"Enter|Space"}).context("multi-host-learn-more")}>discussions/954</x-link>.
</div>
</div>
`,i,{host:this}),e.element.insertBefore(i,e.element.firstChild)};t.tabbedPane.addEventListener(i.TabbedPane.Events.TabSelected,(e=>{const i=e.data.tabId;be.has(i)&&!o.has(i)&&(o.add(i),t.panel(i).then((e=>{e&&a(e,i)})))}));const r=t.tabbedPane.selectedTabId;r&&be.has(r)&&(o.add(r),t.panel(r).then((e=>{e&&a(e,r)}))),this.#d=!0}async#p(){const e=i.InspectorView.InspectorView.instance();try{const t=await e.panel("network");t&&"toggleRecord"in t&&t.toggleRecord(!1)}catch{}}}(n.TargetManager.TargetManager.instance()),c.rnPerfMetrics.entryPointLoadingFinished("rn_fusebox");