@samitouri / QOS-React-2 / commits / a55ab282fa

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;