11import { DevtoolEvents , DevtoolsHook } from "../hook" ;
2- import { Renderer } from "../renderer" ;
2+ import { getRendererByVNodeId , Renderer } from "../renderer" ;
33import { copyToClipboard } from "../../shells/shared/utils" ;
44import { createPicker } from "./picker" ;
55import { ID } from "../../view/store/types" ;
@@ -38,23 +38,32 @@ export interface InspectData {
3838 suspended : boolean ;
3939}
4040
41- export function createAdapter ( port : PortPageHook , renderer : Renderer ) {
41+ export function createAdapter (
42+ port : PortPageHook ,
43+ renderers : Map < number , Renderer > ,
44+ ) {
4245 const { listen, send } = port ;
4346
44- const highlight = createHightlighter ( renderer ) ;
47+ const forAll = ( fn : ( renderer : Renderer ) => void ) => {
48+ for ( const r of renderers . values ( ) ) {
49+ fn ( r ) ;
50+ }
51+ } ;
52+
53+ const highlight = createHightlighter ( id =>
54+ getRendererByVNodeId ( renderers , id ) ,
55+ ) ;
4556
4657 const inspect = ( id : ID ) => {
47- if ( renderer . has ( id ) ) {
48- const data = renderer . inspect ( id ) ;
49- if ( data ) {
50- send ( "inspect-result" , data ) ;
51- }
58+ const data = getRendererByVNodeId ( renderers , id ) ?. inspect ( id ) ;
59+ if ( data ) {
60+ send ( "inspect-result" , data ) ;
5261 }
5362 } ;
5463
5564 const picker = createPicker (
5665 window ,
57- renderer ,
66+ renderers ,
5867 id => {
5968 highlight . highlight ( id ) ;
6069 if ( id > - 1 ) {
@@ -82,19 +91,17 @@ export function createAdapter(port: PortPageHook, renderer: Renderer) {
8291 } ) ;
8392
8493 listen ( "inspect" , id => {
85- if ( id !== null && renderer . has ( id ) ) {
86- const res = renderer . findDomForVNode ( id ) ;
87- if ( res && res . length > 0 ) {
88- ( window as any ) . __PREACT_DEVTOOLS__ . $0 = res [ 0 ] ;
89- }
94+ if ( id === null ) return ;
95+ const res = getRendererByVNodeId ( renderers , id ) ? .findDomForVNode ( id ) ;
96+
97+ if ( res && res . length > 0 ) {
98+ ( window as any ) . __PREACT_DEVTOOLS__ . $0 = res [ 0 ] ;
9099 }
91100 inspect ( id ) ;
92101 } ) ;
93102
94103 listen ( "log" , e => {
95- if ( renderer . has ( e . id ) ) {
96- renderer . log ( e . id , e . children ) ;
97- }
104+ getRendererByVNodeId ( renderers , e . id ) ?. log ( e . id , e . children ) ;
98105 } ) ;
99106
100107 listen ( "highlight" , id => {
@@ -110,7 +117,13 @@ export function createAdapter(port: PortPageHook, renderer: Renderer) {
110117
111118 const update = ( data : DevtoolEvents [ "update" ] ) => {
112119 const { id, type, path, value } = data ;
113- renderer . update ( id , type , path . split ( "." ) . slice ( 1 ) , value ) ;
120+
121+ getRendererByVNodeId ( renderers , id ) ?. update (
122+ id ,
123+ type ,
124+ path . split ( "." ) . slice ( 1 ) ,
125+ value ,
126+ ) ;
114127
115128 // Notify all frontends that something changed
116129 inspect ( id ) ;
@@ -120,24 +133,27 @@ export function createAdapter(port: PortPageHook, renderer: Renderer) {
120133 listen ( "update-state" , data => update ( { ...data , type : "state" } ) ) ;
121134 listen ( "update-context" , data => update ( { ...data , type : "context" } ) ) ;
122135 listen ( "update-hook" , data => {
123- if ( renderer . updateHook && data . meta ) {
124- renderer . updateHook ( data . id , data . meta . index , data . value ) ;
125- }
136+ if ( ! data . meta ) return ;
137+
138+ getRendererByVNodeId ( renderers , data . id ) ?. updateHook ?.(
139+ data . id ,
140+ data . meta . index ,
141+ data . value ,
142+ ) ;
126143 } ) ;
127144
128145 listen ( "update-filter" , data => {
129- renderer . applyFilters ( parseFilters ( data ) ) ;
146+ const filters = parseFilters ( data ) ;
147+ forAll ( r => r . applyFilters ( filters ) ) ;
130148 } ) ;
131149
132- listen ( "refresh" , ( ) => {
133- if ( renderer . refresh ) {
134- renderer . refresh ( ) ;
135- }
136- } ) ;
150+ listen ( "refresh" , ( ) => forAll ( r => r . refresh ?.( ) ) ) ;
137151
138152 // Profiler
139- listen ( "start-profiling" , options => renderer . startProfiling ! ( options ) ) ;
140- listen ( "stop-profiling" , ( ) => renderer . stopProfiling ! ( ) ) ;
153+ listen ( "start-profiling" , options =>
154+ forAll ( r => r . startProfiling ?.( options ) ) ,
155+ ) ;
156+ listen ( "stop-profiling" , ( ) => forAll ( r => r . stopProfiling ?.( ) ) ) ;
141157 listen ( "reload-and-profile" , options => {
142158 window . localStorage . setItem ( PROFILE_RELOAD , JSON . stringify ( options ) ) ;
143159
@@ -152,8 +168,8 @@ export function createAdapter(port: PortPageHook, renderer: Renderer) {
152168 } ) ;
153169
154170 // Stats
155- listen ( "start-stats-recording" , renderer . startRecordStats ! ) ;
156- listen ( "stop-stats-recording" , renderer . stopRecordStats ! ) ;
171+ listen ( "start-stats-recording" , ( ) => forAll ( r => r . startRecordStats ?. ( ) ) ) ;
172+ listen ( "stop-stats-recording" , ( ) => forAll ( r => r . stopRecordStats ?. ( ) ) ) ;
157173 listen ( "reload-and-record-stats" , ( ) => {
158174 window . localStorage . setItem ( STATS_RELOAD , "true" ) ;
159175
@@ -168,29 +184,27 @@ export function createAdapter(port: PortPageHook, renderer: Renderer) {
168184 } ) ;
169185
170186 listen ( "start-highlight-updates" , ( ) => {
171- if ( renderer . startHighlightUpdates ) {
172- renderer . startHighlightUpdates ( ) ;
173- }
187+ forAll ( r => r . startHighlightUpdates ?.( ) ) ;
174188 } ) ;
175189 listen ( "stop-highlight-updates" , ( ) => {
176- if ( renderer . stopHighlightUpdates ) {
177- renderer . stopHighlightUpdates ( ) ;
178- }
190+ forAll ( r => r . stopHighlightUpdates ?.( ) ) ;
179191 } ) ;
180192
181193 listen ( "load-host-selection" , ( ) => {
182194 const hook : DevtoolsHook = ( window as any ) . __PREACT_DEVTOOLS__ ;
183195 const selected = hook . $0 ;
184196 if ( selected ) {
185- const id = renderer . findVNodeIdForDom ( selected ) ;
186- if ( id > - 1 ) {
187- send ( "select-node" , id ) ;
188- }
197+ forAll ( r => {
198+ const id = r . findVNodeIdForDom ( selected ) ;
199+ if ( id > - 1 ) {
200+ send ( "select-node" , id ) ;
201+ }
202+ } ) ;
189203 }
190204 } ) ;
191205
192206 listen ( "view-source" , id => {
193- const vnode = renderer . getVNodeById ( id ) ;
207+ const vnode = getRendererByVNodeId ( renderers , id ) ? .getVNodeById ( id ) ;
194208 const hook : DevtoolsHook = ( window as any ) . __PREACT_DEVTOOLS__ ;
195209
196210 if ( vnode && typeof vnode . type === "function" ) {
@@ -205,8 +219,6 @@ export function createAdapter(port: PortPageHook, renderer: Renderer) {
205219 } ) ;
206220
207221 listen ( "suspend" , data => {
208- if ( renderer . suspend ) {
209- renderer . suspend ( data . id , data . active ) ;
210- }
222+ getRendererByVNodeId ( renderers , data . id ) ?. suspend ?.( data . id , data . active ) ;
211223 } ) ;
212224}
0 commit comments