@samitouri / QOS-React / commits / ac9d698636

Make nodeType into constant for readability and reuse (#9113)

* Make nodeType into constant for readability and reuse * Fix eslint line length warning * Delete unused nodeType values * Destructure HTMLNodeType constant * Make nodeType into constant for readability and reuse * Fix eslint line length warning * Delete unused nodeType values * Destructure HTMLNodeType constant * Fix test * Format using prettier

Sung Won Cho committed Apr 16, 2017 at 03:37 UTC ac9d6986364fd94cd8dd0dde219b2a32a17d60e2
16 files changed +89 -53
eslint-rules/__tests__/no-primitive-constructors-test.js
+4 -2
@@ -34,8 +34,10 @@ ruleTester.run('eslint-rules/no-primitive-constructors', rule, {
34 code: 'String(obj)',
35 errors: [
36 {
37 - message: 'Do not use the String constructor. To cast a value to a string, ' +
38 - 'concat it with the empty string (unless it\'s a symbol, which has different semantics): \'\' + value',
37 + message:
38 + 'Do not use the String constructor. ' +
39 + 'To cast a value to a string, concat it with the empty string ' +
40 + '(unless it\'s a symbol, which has different semantics): \'\' + value',
41 },
42 ],
43 },
src/renderers/dom/fiber/ReactDOMFiber.js
+9 -10
@@ -30,6 +30,11 @@ var ReactInstanceMap = require('ReactInstanceMap');
30 var ReactPortal = require('ReactPortal');
31 var {isValidElement} = require('react');
32 var {injectInternals} = require('ReactFiberDevToolsHook');
33 +var {
34 + ELEMENT_NODE,
35 + DOCUMENT_NODE,
36 + DOCUMENT_FRAGMENT_NODE,
37 +} = require('HTMLNodeType');
38
39 var findDOMNode = require('findDOMNode');
40 var invariant = require('fbjs/lib/invariant');
@@ -52,8 +57,6 @@ if (__DEV__) {
57 var {updatedAncestorInfo} = validateDOMNesting;
58 }
59
55 -const DOCUMENT_NODE = 9;
56 -
60 ReactDOMInjection.inject();
61 ReactControlledComponent.injection.injectFiberControlledHostComponent(
62 ReactDOMFiberComponent,
@@ -83,10 +86,6 @@ type HostContext = HostContextDev | HostContextProd;
86 let eventsEnabled: ?boolean = null;
87 let selectionInformation: ?mixed = null;
88
86 -var ELEMENT_NODE_TYPE = 1;
87 -var DOC_NODE_TYPE = 9;
88 -var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
89 -
89 /**
90 * True if the supplied DOM node is a valid node element.
91 *
@@ -96,9 +95,9 @@ var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
95 */
96 function isValidContainer(node) {
97 return !!(node &&
99 - (node.nodeType === ELEMENT_NODE_TYPE ||
100 - node.nodeType === DOC_NODE_TYPE ||
101 - node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));
98 + (node.nodeType === ELEMENT_NODE ||
99 + node.nodeType === DOCUMENT_NODE ||
100 + node.nodeType === DOCUMENT_FRAGMENT_NODE));
101 }
102
103 function validateContainer(container) {
@@ -112,7 +111,7 @@ function getReactRootElementInContainer(container: any) {
111 return null;
112 }
113
115 - if (container.nodeType === DOC_NODE_TYPE) {
114 + if (container.nodeType === DOCUMENT_NODE) {
115 return container.documentElement;
116 } else {
117 return container.firstChild;
src/renderers/dom/fiber/ReactDOMFiberComponent.js
+3 -4
@@ -25,6 +25,7 @@ var ReactDOMFiberOption = require('ReactDOMFiberOption');
25 var ReactDOMFiberSelect = require('ReactDOMFiberSelect');
26 var ReactDOMFiberTextarea = require('ReactDOMFiberTextarea');
27 var {getCurrentFiberOwnerName} = require('ReactDebugCurrentFiber');
28 +var {DOCUMENT_FRAGMENT_NODE} = require('HTMLNodeType');
29
30 var emptyFunction = require('fbjs/lib/emptyFunction');
31 var invariant = require('fbjs/lib/invariant');
@@ -63,9 +64,6 @@ var {
64 mathml: MATH_NAMESPACE,
65 } = DOMNamespaces;
66
66 -// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
67 -var DOC_FRAGMENT_TYPE = 11;
68 -
67 function getDeclarationErrorAddendum() {
68 if (__DEV__) {
69 var ownerName = getCurrentFiberOwnerName();
@@ -144,7 +142,8 @@ if (__DEV__) {
142 }
143
144 function ensureListeningTo(rootContainerElement, registrationName) {
147 - var isDocumentFragment = rootContainerElement.nodeType === DOC_FRAGMENT_TYPE;
145 + var isDocumentFragment = rootContainerElement.nodeType ===
146 + DOCUMENT_FRAGMENT_NODE;
147 var doc = isDocumentFragment
148 ? rootContainerElement
149 : rootContainerElement.ownerDocument;
src/renderers/dom/shared/HTMLNodeType.js new
+26
@@ -0,0 +1,26 @@
1 +/**
2 + * Copyright 2013-present, 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 HTMLNodeType
10 + */
11 +
12 +'use strict';
13 +
14 +/**
15 + * HTML nodeType values that represent the type of the node
16 + */
17 +
18 +var HTMLNodeType = {
19 + ELEMENT_NODE: 1,
20 + TEXT_NODE: 3,
21 + COMMENT_NODE: 8,
22 + DOCUMENT_NODE: 9,
23 + DOCUMENT_FRAGMENT_NODE: 11,
24 +};
25 +
26 +module.exports = HTMLNodeType;
src/renderers/dom/shared/ReactDOMComponentTree.js
+5 -3
@@ -14,6 +14,7 @@
14 var DOMProperty = require('DOMProperty');
15 var ReactDOMComponentFlags = require('ReactDOMComponentFlags');
16 var {HostComponent, HostText} = require('ReactTypeOfWork');
17 +var {ELEMENT_NODE, COMMENT_NODE} = require('HTMLNodeType');
18
19 var invariant = require('fbjs/lib/invariant');
20
@@ -30,11 +31,12 @@ var internalEventHandlersKey = '__reactEventHandlers$' + randomKey;
31 * Check if a given node should be cached.
32 */
33 function shouldPrecacheNode(node, nodeID) {
33 - return (node.nodeType === 1 &&
34 + return (node.nodeType === ELEMENT_NODE &&
35 node.getAttribute(ATTR_NAME) === '' + nodeID) ||
35 - (node.nodeType === 8 &&
36 + (node.nodeType === COMMENT_NODE &&
37 node.nodeValue === ' react-text: ' + nodeID + ' ') ||
37 - (node.nodeType === 8 && node.nodeValue === ' react-empty: ' + nodeID + ' ');
38 + (node.nodeType === COMMENT_NODE &&
39 + node.nodeValue === ' react-empty: ' + nodeID + ' ');
40 }
41
42 /**
src/renderers/dom/shared/ReactInputSelection.js
+2 -1
@@ -12,6 +12,7 @@
12 'use strict';
13
14 var ReactDOMSelection = require('ReactDOMSelection');
15 +var {ELEMENT_NODE} = require('HTMLNodeType');
16
17 var containsNode = require('fbjs/lib/containsNode');
18 var focusNode = require('fbjs/lib/focusNode');
@@ -64,7 +65,7 @@ var ReactInputSelection = {
65 const ancestors = [];
66 let ancestor = priorFocusedElem;
67 while ((ancestor = ancestor.parentNode)) {
67 - if (ancestor.nodeType === 1) {
68 + if (ancestor.nodeType === ELEMENT_NODE) {
69 ancestors.push({
70 element: ancestor,
71 left: ancestor.scrollLeft,
src/renderers/dom/shared/eventPlugins/SelectEventPlugin.js
+2 -1
@@ -17,6 +17,7 @@ var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
17 var ReactDOMComponentTree = require('ReactDOMComponentTree');
18 var ReactInputSelection = require('ReactInputSelection');
19 var SyntheticEvent = require('SyntheticEvent');
20 +var {DOCUMENT_NODE} = require('HTMLNodeType');
21
22 var getActiveElement = require('fbjs/lib/getActiveElement');
23 var isTextInputElement = require('isTextInputElement');
@@ -148,7 +149,7 @@ var SelectEventPlugin = {
149 ) {
150 var doc = nativeEventTarget.window === nativeEventTarget
151 ? nativeEventTarget.document
151 - : nativeEventTarget.nodeType === 9
152 + : nativeEventTarget.nodeType === DOCUMENT_NODE
153 ? nativeEventTarget
154 : nativeEventTarget.ownerDocument;
155 if (!doc || !isListeningToAllDependencies('onSelect', doc)) {
src/renderers/dom/shared/findDOMNode.js
+2 -1
@@ -11,6 +11,7 @@
11 */
12
13 var ReactInstanceMap = require('ReactInstanceMap');
14 +var {ELEMENT_NODE} = require('HTMLNodeType');
15 var {ReactCurrentOwner} = require('ReactGlobalSharedState');
16
17 var getComponentName = require('getComponentName');
@@ -53,7 +54,7 @@ const findDOMNode = function(
54 if (componentOrElement == null) {
55 return null;
56 }
56 - if ((componentOrElement: any).nodeType === 1) {
57 + if ((componentOrElement: any).nodeType === ELEMENT_NODE) {
58 return (componentOrElement: any);
59 }
60
src/renderers/dom/shared/setTextContent.js
+5 -2
@@ -14,6 +14,7 @@
14 var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
15 var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
16 var setInnerHTML = require('setInnerHTML');
17 +var {TEXT_NODE} = require('HTMLNodeType');
18
19 /**
20 * Set the textContent property of a node, ensuring that whitespace is preserved
@@ -30,7 +31,9 @@ var setTextContent = function(node, text) {
31 var firstChild = node.firstChild;
32
33 if (
33 - firstChild && firstChild === node.lastChild && firstChild.nodeType === 3
34 + firstChild &&
35 + firstChild === node.lastChild &&
36 + firstChild.nodeType === TEXT_NODE
37 ) {
38 firstChild.nodeValue = text;
39 return;
@@ -42,7 +45,7 @@ var setTextContent = function(node, text) {
45 if (ExecutionEnvironment.canUseDOM) {
46 if (!('textContent' in document.documentElement)) {
47 setTextContent = function(node, text) {
45 - if (node.nodeType === 3) {
48 + if (node.nodeType === TEXT_NODE) {
49 node.nodeValue = text;
50 return;
51 }
src/renderers/dom/shared/utils/getEventTarget.js
+3 -1
@@ -11,6 +11,8 @@
11
12 'use strict';
13
14 +var {TEXT_NODE} = require('HTMLNodeType');
15 +
16 /**
17 * Gets the target node from a native browser event by accounting for
18 * inconsistencies in browser DOM APIs.
@@ -28,7 +30,7 @@ function getEventTarget(nativeEvent) {
30
31 // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
32 // @see http://www.quirksmode.org/js/events_properties.html
31 - return target.nodeType === 3 ? target.parentNode : target;
33 + return target.nodeType === TEXT_NODE ? target.parentNode : target;
34 }
35
36 module.exports = getEventTarget;
src/renderers/dom/shared/utils/getNodeForCharacterOffset.js
+3 -1
@@ -11,6 +11,8 @@
11
12 'use strict';
13
14 +var {TEXT_NODE} = require('HTMLNodeType');
15 +
16 /**
17 * Given any node return the first leaf node without children.
18 *
@@ -53,7 +55,7 @@ function getNodeForCharacterOffset(root, offset) {
55 var nodeEnd = 0;
56
57 while (node) {
56 - if (node.nodeType === 3) {
58 + if (node.nodeType === TEXT_NODE) {
59 nodeEnd = nodeStart + node.textContent.length;
60
61 if (nodeStart <= offset && nodeEnd >= offset) {
src/renderers/dom/stack/client/DOMLazyTree.js
+3 -6
@@ -13,13 +13,10 @@
13
14 var DOMNamespaces = require('DOMNamespaces');
15 var setInnerHTML = require('setInnerHTML');
16 -
16 +var {DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE} = require('HTMLNodeType');
17 var createMicrosoftUnsafeLocalFunction = require('createMicrosoftUnsafeLocalFunction');
18 var setTextContent = require('setTextContent');
19
20 -var ELEMENT_NODE_TYPE = 1;
21 -var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
22 -
20 /**
21 * In IE (8-11) and Edge, appending nodes with no children is dramatically
22 * faster than appending a full subtree, so we essentially queue up the
@@ -63,8 +60,8 @@ var insertTreeBefore = createMicrosoftUnsafeLocalFunction(
60 // <param> nodes immediately upon insertion into the DOM, so <object>
61 // must also be populated prior to insertion into the DOM.
62 if (
66 - tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE ||
67 - (tree.node.nodeType === ELEMENT_NODE_TYPE &&
63 + tree.node.nodeType === DOCUMENT_FRAGMENT_NODE ||
64 + (tree.node.nodeType === ELEMENT_NODE &&
65 tree.node.nodeName.toLowerCase() === 'object' &&
66 (tree.node.namespaceURI == null ||
67 tree.node.namespaceURI === DOMNamespaces.html))
src/renderers/dom/stack/client/ReactDOMComponent.js
+2 -4
@@ -30,6 +30,7 @@ var ReactDOMTextarea = require('ReactDOMTextarea');
30 var ReactInstrumentation = require('ReactInstrumentation');
31 var ReactMultiChild = require('ReactMultiChild');
32 var ReactServerRenderingTransaction = require('ReactServerRenderingTransaction');
33 +var {DOCUMENT_FRAGMENT_NODE} = require('HTMLNodeType');
34
35 var emptyFunction = require('fbjs/lib/emptyFunction');
36 var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
@@ -55,9 +56,6 @@ var RESERVED_PROPS = {
56 suppressContentEditableWarning: null,
57 };
58
58 -// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
59 -var DOC_FRAGMENT_TYPE = 11;
60 -
59 function getDeclarationErrorAddendum(internalInstance) {
60 if (internalInstance) {
61 var owner = internalInstance._currentElement._owner || null;
@@ -139,7 +137,7 @@ function ensureListeningTo(inst, registrationName, transaction) {
137 }
138 var containerInfo = inst._hostContainerInfo;
139 var isDocumentFragment = containerInfo._node &&
142 - containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
140 + containerInfo._node.nodeType === DOCUMENT_FRAGMENT_NODE;
141 var doc = isDocumentFragment
142 ? containerInfo._node
143 : containerInfo._ownerDocument;
src/renderers/dom/stack/client/ReactDOMContainerInfo.js
+2 -3
@@ -12,15 +12,14 @@
12 'use strict';
13
14 var validateDOMNesting = require('validateDOMNesting');
15 -
16 -var DOC_NODE_TYPE = 9;
15 +var {DOCUMENT_NODE} = require('HTMLNodeType');
16
17 function ReactDOMContainerInfo(topLevelWrapper, node) {
18 var info = {
19 _topLevelWrapper: topLevelWrapper,
20 _idCounter: 1,
21 _ownerDocument: node
23 - ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument
22 + ? node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument
23 : null,
24 _node: node,
25 _tag: node ? node.nodeName.toLowerCase() : null,
src/renderers/dom/stack/client/ReactDOMTextComponent.js
+4 -1
@@ -14,6 +14,7 @@
14 var DOMChildrenOperations = require('DOMChildrenOperations');
15 var DOMLazyTree = require('DOMLazyTree');
16 var ReactDOMComponentTree = require('ReactDOMComponentTree');
17 +var {COMMENT_NODE} = require('HTMLNodeType');
18
19 var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
20 var invariant = require('fbjs/lib/invariant');
@@ -159,7 +160,9 @@ Object.assign(ReactDOMTextComponent.prototype, {
160 'Missing closing comment for text component %s',
161 this._domID,
162 );
162 - if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
163 + if (
164 + node.nodeType === COMMENT_NODE && node.nodeValue === ' /react-text '
165 + ) {
166 this._closingComment = node;
167 break;
168 }
src/renderers/dom/stack/client/ReactMount.js
+14 -13
@@ -33,14 +33,15 @@ var setInnerHTML = require('setInnerHTML');
33 var shouldUpdateReactComponent = require('shouldUpdateReactComponent');
34 var warning = require('fbjs/lib/warning');
35 var validateCallback = require('validateCallback');
36 +var {
37 + DOCUMENT_NODE,
38 + ELEMENT_NODE,
39 + DOCUMENT_FRAGMENT_NODE,
40 +} = require('HTMLNodeType');
41
42 var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
43 var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
44
40 -var ELEMENT_NODE_TYPE = 1;
41 -var DOC_NODE_TYPE = 9;
42 -var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
43 -
45 var instancesByReactRootID = {};
46
47 /**
@@ -69,7 +70,7 @@ function getReactRootElementInContainer(container) {
70 return null;
71 }
72
72 - if (container.nodeType === DOC_NODE_TYPE) {
73 + if (container.nodeType === DOCUMENT_NODE) {
74 return container.documentElement;
75 } else {
76 return container.firstChild;
@@ -181,7 +182,7 @@ function unmountComponentFromNode(instance, container) {
182 ReactInstrumentation.debugTool.onEndFlush();
183 }
184
184 - if (container.nodeType === DOC_NODE_TYPE) {
185 + if (container.nodeType === DOCUMENT_NODE) {
186 container = container.documentElement;
187 }
188
@@ -233,9 +234,9 @@ function nodeIsRenderedByOtherInstance(container) {
234 */
235 function isValidContainer(node) {
236 return !!(node &&
236 - (node.nodeType === ELEMENT_NODE_TYPE ||
237 - node.nodeType === DOC_NODE_TYPE ||
238 - node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));
237 + (node.nodeType === ELEMENT_NODE ||
238 + node.nodeType === DOCUMENT_NODE ||
239 + node.nodeType === DOCUMENT_FRAGMENT_NODE));
240 }
241
242 /**
@@ -638,7 +639,7 @@ var ReactMount = {
639 var containerHasNonRootReactChild = hasNonRootReactChild(container);
640
641 // Check if the container itself is a React root node.
641 - var isContainerReactRoot = container.nodeType === 1 &&
642 + var isContainerReactRoot = container.nodeType === ELEMENT_NODE &&
643 container.hasAttribute(ROOT_ATTR_NAME);
644
645 if (__DEV__) {
@@ -701,7 +702,7 @@ var ReactMount = {
702 // insert markup into a <div> or <iframe> depending on the container
703 // type to perform the same normalizations before comparing.
704 var normalizer;
704 - if (container.nodeType === ELEMENT_NODE_TYPE) {
705 + if (container.nodeType === ELEMENT_NODE) {
706 normalizer = document.createElement('div');
707 normalizer.innerHTML = markup;
708 normalizedMarkup = normalizer.innerHTML;
@@ -721,7 +722,7 @@ var ReactMount = {
722 rootMarkup.substring(diffIndex - 20, diffIndex + 20);
723
724 invariant(
724 - container.nodeType !== DOC_NODE_TYPE,
725 + container.nodeType !== DOCUMENT_NODE,
726 "You're trying to render a component to the document using " +
727 'server rendering but the checksum was invalid. This usually ' +
728 'means you rendered a different component type or props on ' +
@@ -751,7 +752,7 @@ var ReactMount = {
752 }
753
754 invariant(
754 - container.nodeType !== DOC_NODE_TYPE,
755 + container.nodeType !== DOCUMENT_NODE,
756 "You're trying to render a component to the document but " +
757 "you didn't use server rendering. We can't do this " +
758 'without using server rendering due to cross-browser quirks. ' +