Initial outline for new devtools api
Jim committed
Nov 12, 2015 at 13:40 UTC
a55ab282fa9f93e05ad9179f5b379013805db7b2
2 files changed
+53
src/renderers/dom/ReactDOM.js
+1
@@ -14,6 +14,7 @@
14
'use strict';
15
16
var ReactDOMComponentTree = require('ReactDOMComponentTree');
17
+var ReactDOMDevtools = require('ReactDOMDevtools');
18
var ReactDefaultInjection = require('ReactDefaultInjection');
19
var ReactMount = require('ReactMount');
20
var ReactPerf = require('ReactPerf');
src/renderers/dom/shared/ReactDOMDevtools.js
new
+52
@@ -0,0 +1,52 @@
1
+/**
2
+ * Copyright 2013-2015, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ *
9
+ * @providesModule ReactDOMDevtools
10
+ */
11
+
12
+'use strict';
13
+
14
+var warning = require('warning');
15
+
16
+var eventHandlers = [];
17
+var handlerDoesThrowForEvent = {};
18
+
19
+var ReactDOMDevtools = {
20
+ addDevtool(devtool) {
21
+ eventHandlers.push(devtool);
22
+ },
23
+
24
+ removeDevtool(devtool) {
25
+ for (var i = 0; i < eventHandlers.length; i++) {
26
+ if (eventHandlers[i] === devtool) {
27
+ eventHandlers.splice(i, 1);
28
+ i--;
29
+ }
30
+ }
31
+ },
32
+
33
+ emitEvent(eventName, eventData) {
34
+ if (__DEV__) {
35
+ eventHandlers.forEach(function(handler) {
36
+ try {
37
+ handler.handleEvent(eventName, eventData);
38
+ } catch (e) {
39
+ warning(
40
+ !handlerDoesThrowForEvent[eventName],
41
+ 'exception thrown by devtool while handling %s: %s',
42
+ eventName,
43
+ e.message
44
+ );
45
+ handlerDoesThrowForEvent[eventName] = true;
46
+ }
47
+ });
48
+ }
49
+ },
50
+};
51
+
52
+module.exports = ReactDOMDevtools;