@@ -16,11 +16,47 @@ import {
16
16
MESSAGE_TYPE_SAVED_PREFERENCES ,
17
17
} from './constants' ;
18
18
19
+ import type { Wall } from 'react-devtools-shared/src/types' ;
19
20
import type { FrontendBridge } from 'react-devtools-shared/src/bridge' ;
20
21
import type { Props } from 'react-devtools-shared/src/devtools/views/DevTools' ;
21
22
23
+ export function createStore ( bridge : FrontendBridge ) : Store {
24
+ return new Store ( bridge , { supportsTraceUpdates : true } ) ;
25
+ }
26
+
27
+ export function createBridge (
28
+ contentWindow : window ,
29
+ wall ?: Wall ,
30
+ ) : FrontendBridge {
31
+ if ( wall == null ) {
32
+ wall = {
33
+ listen ( fn ) {
34
+ const onMessage = ( { data} ) => {
35
+ fn ( data ) ;
36
+ } ;
37
+ window . addEventListener ( 'message' , onMessage ) ;
38
+ return ( ) => {
39
+ window . removeEventListener ( 'message' , onMessage ) ;
40
+ } ;
41
+ } ,
42
+ send ( event : string , payload : any , transferable ?: Array < any > ) {
43
+ contentWindow. postMessage ( { event, payload} , '*' , transferable ) ;
44
+ } ,
45
+ } ;
46
+ }
47
+
48
+ return ( new Bridge ( wall ) : FrontendBridge ) ;
49
+ }
50
+
22
51
export function initialize (
23
52
contentWindow : window ,
53
+ {
54
+ bridge,
55
+ store,
56
+ } : { |
57
+ bridge ?: FrontendBridge ,
58
+ store ?: Store ,
59
+ | } = { } ,
24
60
) : React . AbstractComponent < Props , mixed > {
25
61
const onGetSavedPreferencesMessage = ( { data, source} ) => {
26
62
if ( source === 'react-devtools-content-script' ) {
@@ -54,22 +90,13 @@ export function initialize(
54
90
55
91
window . addEventListener ( 'message' , onGetSavedPreferencesMessage ) ;
56
92
57
- const bridge : FrontendBridge = new Bridge ( {
58
- listen ( fn ) {
59
- const onMessage = ( { data} ) => {
60
- fn ( data ) ;
61
- } ;
62
- window . addEventListener ( 'message' , onMessage ) ;
63
- return ( ) => {
64
- window . removeEventListener ( 'message' , onMessage ) ;
65
- } ;
66
- } ,
67
- send ( event : string , payload : any , transferable ?: Array < any > ) {
68
- contentWindow. postMessage ( { event, payload} , '*' , transferable ) ;
69
- } ,
70
- } ) ;
93
+ if ( bridge == null ) {
94
+ bridge = createBridge ( ) ;
95
+ }
71
96
72
- const store : Store = new Store ( bridge , { supportsTraceUpdates : true } ) ;
97
+ if ( store == null ) {
98
+ store = createStore ( bridge ) ;
99
+ }
73
100
74
101
const ForwardRef = forwardRef < Props , mixed > ( ( props , ref ) => (
75
102
< DevTools ref = { ref } bridge = { bridge } store = { store } { ...props } />
0 commit comments