react 0.6.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -217
- package/ReactJSErrors.js +40 -0
- package/addons.js +4 -0
- package/lib/$.js +46 -0
- package/lib/CSSCore.js +114 -0
- package/lib/CSSProperty.js +90 -0
- package/lib/CSSPropertyOperations.js +97 -0
- package/lib/CallbackRegistry.js +91 -0
- package/lib/ChangeEventPlugin.js +365 -0
- package/lib/CompositionEventPlugin.js +212 -0
- package/lib/DOMChildrenOperations.js +135 -0
- package/lib/DOMProperty.js +266 -0
- package/lib/DOMPropertyOperations.js +168 -0
- package/lib/Danger.js +186 -0
- package/lib/DefaultDOMPropertyConfig.js +187 -0
- package/lib/DefaultEventPluginOrder.js +44 -0
- package/lib/EnterLeaveEventPlugin.js +112 -0
- package/lib/EventConstants.js +73 -0
- package/lib/EventListener.js +61 -0
- package/lib/EventPluginHub.js +190 -0
- package/lib/EventPluginRegistry.js +237 -0
- package/lib/EventPluginUtils.js +185 -0
- package/lib/EventPropagators.js +179 -0
- package/lib/ExecutionEnvironment.js +41 -0
- package/lib/LinkedStateMixin.js +46 -0
- package/lib/LinkedValueMixin.js +68 -0
- package/lib/MobileSafariClickEventPlugin.js +63 -0
- package/lib/PooledClass.js +113 -0
- package/lib/React.js +71 -0
- package/lib/ReactChildren.js +132 -0
- package/lib/ReactComponent.js +515 -0
- package/lib/ReactComponentBrowserEnvironment.js +140 -0
- package/lib/ReactComponentEnvironment.js +24 -0
- package/lib/ReactCompositeComponent.js +1020 -0
- package/lib/ReactCurrentOwner.js +39 -0
- package/lib/ReactDOM.js +194 -0
- package/lib/ReactDOMButton.js +64 -0
- package/lib/ReactDOMComponent.js +374 -0
- package/lib/ReactDOMForm.js +52 -0
- package/lib/ReactDOMIDOperations.js +173 -0
- package/lib/ReactDOMInput.js +169 -0
- package/lib/ReactDOMOption.js +50 -0
- package/lib/ReactDOMSelect.js +160 -0
- package/lib/ReactDOMSelection.js +189 -0
- package/lib/ReactDOMTextarea.js +136 -0
- package/lib/ReactDefaultBatchingStrategy.js +75 -0
- package/lib/ReactDefaultInjection.js +91 -0
- package/lib/ReactDefaultPerf.js +407 -0
- package/lib/ReactErrorUtils.js +46 -0
- package/lib/ReactEventEmitter.js +341 -0
- package/lib/ReactEventEmitterMixin.js +89 -0
- package/lib/ReactEventTopLevelCallback.js +89 -0
- package/lib/ReactInputSelection.js +140 -0
- package/lib/ReactInstanceHandles.js +322 -0
- package/lib/ReactLink.js +54 -0
- package/lib/ReactMarkupChecksum.js +53 -0
- package/lib/ReactMount.js +617 -0
- package/lib/ReactMountReady.js +95 -0
- package/lib/ReactMultiChild.js +441 -0
- package/lib/ReactMultiChildUpdateTypes.js +36 -0
- package/lib/ReactOwner.js +146 -0
- package/lib/ReactPerf.js +88 -0
- package/lib/ReactPropTransferer.js +128 -0
- package/lib/ReactPropTypes.js +158 -0
- package/lib/ReactReconcileTransaction.js +161 -0
- package/lib/ReactServerRendering.js +62 -0
- package/lib/ReactStateSetters.js +111 -0
- package/lib/ReactTextComponent.js +94 -0
- package/lib/ReactTransitionEvents.js +97 -0
- package/lib/ReactTransitionGroup.js +112 -0
- package/lib/ReactTransitionKeySet.js +111 -0
- package/lib/ReactTransitionableChild.js +152 -0
- package/lib/ReactUpdates.js +145 -0
- package/lib/ReactWithAddons.js +41 -0
- package/lib/SelectEventPlugin.js +217 -0
- package/lib/SimpleEventPlugin.js +365 -0
- package/lib/SyntheticClipboardEvent.js +45 -0
- package/lib/SyntheticCompositionEvent.js +51 -0
- package/lib/SyntheticEvent.js +163 -0
- package/lib/SyntheticFocusEvent.js +44 -0
- package/lib/SyntheticKeyboardEvent.js +56 -0
- package/lib/SyntheticMouseEvent.js +85 -0
- package/lib/SyntheticTouchEvent.js +50 -0
- package/lib/SyntheticUIEvent.js +45 -0
- package/lib/SyntheticWheelEvent.js +63 -0
- package/lib/Transaction.js +251 -0
- package/lib/ViewportMetrics.js +37 -0
- package/lib/accumulate.js +54 -0
- package/lib/adler32.js +39 -0
- package/lib/containsNode.js +49 -0
- package/lib/copyProperties.js +54 -0
- package/lib/createArrayFrom.js +94 -0
- package/lib/createNodesFromMarkup.js +93 -0
- package/lib/createObjectFrom.js +61 -0
- package/lib/cx.js +44 -0
- package/lib/dangerousStyleValue.js +57 -0
- package/lib/emptyFunction.js +43 -0
- package/lib/escapeTextForBrowser.js +47 -0
- package/lib/ex.js +49 -0
- package/lib/filterAttributes.js +45 -0
- package/lib/flattenChildren.js +54 -0
- package/lib/forEachAccumulated.js +36 -0
- package/lib/ge.js +76 -0
- package/lib/getActiveElement.js +33 -0
- package/lib/getEventTarget.js +36 -0
- package/lib/getMarkupWrap.js +108 -0
- package/lib/getNodeForCharacterOffset.js +80 -0
- package/lib/getReactRootElementInContainer.js +40 -0
- package/lib/getTextContentAccessor.js +40 -0
- package/lib/getUnboundedScrollPosition.js +45 -0
- package/lib/hyphenate.js +35 -0
- package/lib/invariant.js +54 -0
- package/lib/isEventSupported.js +74 -0
- package/lib/isNode.js +33 -0
- package/lib/isTextInputElement.js +49 -0
- package/lib/isTextNode.js +30 -0
- package/lib/joinClasses.js +44 -0
- package/lib/keyMirror.js +58 -0
- package/lib/keyOf.js +41 -0
- package/lib/memoizeStringOnly.js +39 -0
- package/lib/merge.js +37 -0
- package/lib/mergeHelpers.js +137 -0
- package/lib/mergeInto.js +45 -0
- package/lib/mixInto.js +34 -0
- package/lib/mutateHTMLNodeWithMarkup.js +100 -0
- package/lib/objMap.js +47 -0
- package/lib/objMapKeyVal.js +47 -0
- package/lib/performanceNow.js +42 -0
- package/lib/shallowEqual.js +49 -0
- package/lib/traverseAllChildren.js +127 -0
- package/package.json +33 -21
- package/react.js +4 -0
- package/.npmignore +0 -7
- package/.travis.yml +0 -5
- package/Jakefile.js +0 -39
- package/LICENSE +0 -19
- package/browser-test/dist.html +0 -89
- package/browser-test/index.html +0 -85
- package/browser-test/min.html +0 -89
- package/dist/react.js +0 -3094
- package/dist/react.min.js +0 -22
- package/doc/advanced.md +0 -166
- package/doc/color-def.graffle +0 -938
- package/doc/color-def.png +0 -0
- package/doc/simple.dot +0 -25
- package/doc/simple.png +0 -0
- package/examples/longer-example.js +0 -41
- package/examples/simple.js +0 -45
- package/examples/using-ast-directly.js +0 -30
- package/examples/using-events1.js +0 -79
- package/examples/using-log-events.js +0 -43
- package/lib/base-task.js +0 -123
- package/lib/cb-task.js +0 -84
- package/lib/core.js +0 -138
- package/lib/dsl.js +0 -138
- package/lib/error.js +0 -55
- package/lib/event-collector.js +0 -81
- package/lib/event-manager.js +0 -85
- package/lib/eventemitter.js +0 -20
- package/lib/finalcb-first-task.js +0 -68
- package/lib/finalcb-task.js +0 -65
- package/lib/id.js +0 -22
- package/lib/input-parser.js +0 -56
- package/lib/log-events.js +0 -92
- package/lib/parse.js +0 -41
- package/lib/promise-resolve.js +0 -50
- package/lib/promise-task.js +0 -93
- package/lib/react.js +0 -59
- package/lib/ret-task.js +0 -71
- package/lib/sprintf.js +0 -18
- package/lib/status.js +0 -14
- package/lib/task.js +0 -251
- package/lib/track-tasks.js +0 -74
- package/lib/validate.js +0 -159
- package/lib/vcon.js +0 -90
- package/lib/when-task.js +0 -85
- package/src/dist.build.requirejs +0 -20
- package/test/ast.mocha.js +0 -136
- package/test/cb-task.mocha.js +0 -220
- package/test/core-deferred.mocha.js +0 -143
- package/test/core-when.mocha.js +0 -96
- package/test/core.mocha.js +0 -589
- package/test/dsl.mocha.js +0 -350
- package/test/event-manager.mocha.js +0 -119
- package/test/exec-options.mocha.js +0 -48
- package/test/finalcb-task.mocha.js +0 -58
- package/test/input-parser.mocha.js +0 -86
- package/test/mocha.opts +0 -2
- package/test/module-use.mocha.js +0 -147
- package/test/promise-auto-resolve.mocha.js +0 -68
- package/test/ret-task.mocha.js +0 -220
- package/test/task.mocha.js +0 -42
- package/test/validate-cb-task.mocha.js +0 -100
- package/test/validate-ret-task.mocha.js +0 -110
- package/test/validate.mocha.js +0 -324
- package/test/vcon.mocha.js +0 -193
- package/vendor/chai/chai.js +0 -2038
- package/vendor/jquery/jquery-1.7.1.js +0 -9266
- package/vendor/jquery/jquery-1.7.1.min.js +0 -4
- package/vendor/mocha/mocha.css +0 -135
- package/vendor/mocha/mocha.js +0 -3589
- package/vendor/node/util.js +0 -531
- package/vendor/requirejs/require.js +0 -2053
- package/vendor/requirejs/require.min.js +0 -33
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule isEventSupported
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var ExecutionEnvironment = require("./ExecutionEnvironment");
|
|
22
|
+
|
|
23
|
+
var testNode, useHasFeature;
|
|
24
|
+
if (ExecutionEnvironment.canUseDOM) {
|
|
25
|
+
testNode = document.createElement('div');
|
|
26
|
+
useHasFeature =
|
|
27
|
+
document.implementation &&
|
|
28
|
+
document.implementation.hasFeature &&
|
|
29
|
+
// `hasFeature` always returns true in Firefox 19+.
|
|
30
|
+
document.implementation.hasFeature('', '') !== true;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Checks if an event is supported in the current execution environment.
|
|
35
|
+
*
|
|
36
|
+
* NOTE: This will not work correctly for non-generic events such as `change`,
|
|
37
|
+
* `reset`, `load`, `error`, and `select`.
|
|
38
|
+
*
|
|
39
|
+
* Borrows from Modernizr.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} eventNameSuffix Event name, e.g. "click".
|
|
42
|
+
* @param {?boolean} capture Check if the capture phase is supported.
|
|
43
|
+
* @return {boolean} True if the event is supported.
|
|
44
|
+
* @internal
|
|
45
|
+
* @license Modernizr 3.0.0pre (Custom Build) | MIT
|
|
46
|
+
*/
|
|
47
|
+
function isEventSupported(eventNameSuffix, capture) {
|
|
48
|
+
if (!testNode || (capture && !testNode.addEventListener)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
var element = document.createElement('div');
|
|
52
|
+
|
|
53
|
+
var eventName = 'on' + eventNameSuffix;
|
|
54
|
+
var isSupported = eventName in element;
|
|
55
|
+
|
|
56
|
+
if (!isSupported) {
|
|
57
|
+
element.setAttribute(eventName, 'return;');
|
|
58
|
+
isSupported = typeof element[eventName] === 'function';
|
|
59
|
+
if (typeof element[eventName] !== 'undefined') {
|
|
60
|
+
element[eventName] = undefined;
|
|
61
|
+
}
|
|
62
|
+
element.removeAttribute(eventName);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
|
|
66
|
+
// This is the only way to test support for the `wheel` event in IE9+.
|
|
67
|
+
isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
element = null;
|
|
71
|
+
return isSupported;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
module.exports = isEventSupported;
|
package/lib/isNode.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule isNode
|
|
17
|
+
* @typechecks
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param {*} object The object to check.
|
|
22
|
+
* @return {boolean} Whether or not the object is a DOM node.
|
|
23
|
+
*/
|
|
24
|
+
function isNode(object) {
|
|
25
|
+
return !!(object && (
|
|
26
|
+
typeof Node !== 'undefined' ? object instanceof Node :
|
|
27
|
+
typeof object === 'object' &&
|
|
28
|
+
typeof object.nodeType === 'number' &&
|
|
29
|
+
typeof object.nodeName === 'string'
|
|
30
|
+
));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = isNode;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule isTextInputElement
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
|
|
23
|
+
*/
|
|
24
|
+
var supportedInputTypes = {
|
|
25
|
+
'color': true,
|
|
26
|
+
'date': true,
|
|
27
|
+
'datetime': true,
|
|
28
|
+
'datetime-local': true,
|
|
29
|
+
'email': true,
|
|
30
|
+
'month': true,
|
|
31
|
+
'number': true,
|
|
32
|
+
'password': true,
|
|
33
|
+
'range': true,
|
|
34
|
+
'search': true,
|
|
35
|
+
'tel': true,
|
|
36
|
+
'text': true,
|
|
37
|
+
'time': true,
|
|
38
|
+
'url': true,
|
|
39
|
+
'week': true
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function isTextInputElement(elem) {
|
|
43
|
+
return elem && (
|
|
44
|
+
(elem.nodeName === 'INPUT' && supportedInputTypes[elem.type]) ||
|
|
45
|
+
elem.nodeName === 'TEXTAREA'
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
module.exports = isTextInputElement;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule isTextNode
|
|
17
|
+
* @typechecks
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
var isNode = require("./isNode");
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {*} object The object to check.
|
|
24
|
+
* @return {boolean} Whether or not the object is a DOM text node.
|
|
25
|
+
*/
|
|
26
|
+
function isTextNode(object) {
|
|
27
|
+
return isNode(object) && object.nodeType == 3;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = isTextNode;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule joinClasses
|
|
17
|
+
* @typechecks static-only
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Combines multiple className strings into one.
|
|
24
|
+
* http://jsperf.com/joinclasses-args-vs-array
|
|
25
|
+
*
|
|
26
|
+
* @param {...?string} classes
|
|
27
|
+
* @return {string}
|
|
28
|
+
*/
|
|
29
|
+
function joinClasses(className/*, ... */) {
|
|
30
|
+
if (!className) {
|
|
31
|
+
className = '';
|
|
32
|
+
}
|
|
33
|
+
var nextClass;
|
|
34
|
+
var argLength = arguments.length;
|
|
35
|
+
if (argLength > 1) {
|
|
36
|
+
for (var ii = 1; ii < argLength; ii++) {
|
|
37
|
+
nextClass = arguments[ii];
|
|
38
|
+
nextClass && (className += ' ' + nextClass);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return className;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
module.exports = joinClasses;
|
package/lib/keyMirror.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule keyMirror
|
|
17
|
+
* @typechecks static-only
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
var invariant = require("./invariant");
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Constructs an enumeration with keys equal to their value.
|
|
26
|
+
*
|
|
27
|
+
* For example:
|
|
28
|
+
*
|
|
29
|
+
* var COLORS = keyMirror({blue: null, red: null});
|
|
30
|
+
* var myColor = COLORS.blue;
|
|
31
|
+
* var isColorValid = !!COLORS[myColor];
|
|
32
|
+
*
|
|
33
|
+
* The last line could not be performed if the values of the generated enum were
|
|
34
|
+
* not equal to their keys.
|
|
35
|
+
*
|
|
36
|
+
* Input: {key1: val1, key2: val2}
|
|
37
|
+
* Output: {key1: key1, key2: key2}
|
|
38
|
+
*
|
|
39
|
+
* @param {object} obj
|
|
40
|
+
* @return {object}
|
|
41
|
+
*/
|
|
42
|
+
var keyMirror = function(obj) {
|
|
43
|
+
var ret = {};
|
|
44
|
+
var key;
|
|
45
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
46
|
+
obj instanceof Object && !Array.isArray(obj),
|
|
47
|
+
'keyMirror(...): Argument must be an object.'
|
|
48
|
+
) : invariant(obj instanceof Object && !Array.isArray(obj)));
|
|
49
|
+
for (key in obj) {
|
|
50
|
+
if (!obj.hasOwnProperty(key)) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
ret[key] = key;
|
|
54
|
+
}
|
|
55
|
+
return ret;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
module.exports = keyMirror;
|
package/lib/keyOf.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule keyOf
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Allows extraction of a minified key. Let's the build system minify keys
|
|
21
|
+
* without loosing the ability to dynamically use key strings as values
|
|
22
|
+
* themselves. Pass in an object with a single key/val pair and it will return
|
|
23
|
+
* you the string key of that single record. Suppose you want to grab the
|
|
24
|
+
* value for a key 'className' inside of an object. Key/val minification may
|
|
25
|
+
* have aliased that key to be 'xa12'. keyOf({className: null}) will return
|
|
26
|
+
* 'xa12' in that case. Resolve keys you want to use once at startup time, then
|
|
27
|
+
* reuse those resolutions.
|
|
28
|
+
*/
|
|
29
|
+
var keyOf = function(oneKeyObj) {
|
|
30
|
+
var key;
|
|
31
|
+
for (key in oneKeyObj) {
|
|
32
|
+
if (!oneKeyObj.hasOwnProperty(key)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
return key;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
module.exports = keyOf;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule memoizeStringOnly
|
|
17
|
+
* @typechecks static-only
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Memoizes the return value of a function that accepts one string argument.
|
|
24
|
+
*
|
|
25
|
+
* @param {function} callback
|
|
26
|
+
* @return {function}
|
|
27
|
+
*/
|
|
28
|
+
function memoizeStringOnly(callback) {
|
|
29
|
+
var cache = {};
|
|
30
|
+
return function(string) {
|
|
31
|
+
if (cache.hasOwnProperty(string)) {
|
|
32
|
+
return cache[string];
|
|
33
|
+
} else {
|
|
34
|
+
return cache[string] = callback.call(this, string);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = memoizeStringOnly;
|
package/lib/merge.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule merge
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
"use strict";
|
|
20
|
+
|
|
21
|
+
var mergeInto = require("./mergeInto");
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Shallow merges two structures into a return value, without mutating either.
|
|
25
|
+
*
|
|
26
|
+
* @param {?object} one Optional object with properties to merge from.
|
|
27
|
+
* @param {?object} two Optional object with properties to merge from.
|
|
28
|
+
* @return {object} The shallow extension of one by two.
|
|
29
|
+
*/
|
|
30
|
+
var merge = function(one, two) {
|
|
31
|
+
var result = {};
|
|
32
|
+
mergeInto(result, one);
|
|
33
|
+
mergeInto(result, two);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
module.exports = merge;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2013 Facebook, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
* @providesModule mergeHelpers
|
|
17
|
+
*
|
|
18
|
+
* requiresPolyfills: Array.isArray
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
"use strict";
|
|
22
|
+
|
|
23
|
+
var invariant = require("./invariant");
|
|
24
|
+
var keyMirror = require("./keyMirror");
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Maximum number of levels to traverse. Will catch circular structures.
|
|
28
|
+
* @const
|
|
29
|
+
*/
|
|
30
|
+
var MAX_MERGE_DEPTH = 36;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* We won't worry about edge cases like new String('x') or new Boolean(true).
|
|
34
|
+
* Functions are considered terminals, and arrays are not.
|
|
35
|
+
* @param {*} o The item/object/value to test.
|
|
36
|
+
* @return {boolean} true iff the argument is a terminal.
|
|
37
|
+
*/
|
|
38
|
+
var isTerminal = function(o) {
|
|
39
|
+
return typeof o !== 'object' || o === null;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
var mergeHelpers = {
|
|
43
|
+
|
|
44
|
+
MAX_MERGE_DEPTH: MAX_MERGE_DEPTH,
|
|
45
|
+
|
|
46
|
+
isTerminal: isTerminal,
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Converts null/undefined values into empty object.
|
|
50
|
+
*
|
|
51
|
+
* @param {?Object=} arg Argument to be normalized (nullable optional)
|
|
52
|
+
* @return {!Object}
|
|
53
|
+
*/
|
|
54
|
+
normalizeMergeArg: function(arg) {
|
|
55
|
+
return arg === undefined || arg === null ? {} : arg;
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* If merging Arrays, a merge strategy *must* be supplied. If not, it is
|
|
60
|
+
* likely the caller's fault. If this function is ever called with anything
|
|
61
|
+
* but `one` and `two` being `Array`s, it is the fault of the merge utilities.
|
|
62
|
+
*
|
|
63
|
+
* @param {*} one Array to merge into.
|
|
64
|
+
* @param {*} two Array to merge from.
|
|
65
|
+
*/
|
|
66
|
+
checkMergeArrayArgs: function(one, two) {
|
|
67
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
68
|
+
Array.isArray(one) && Array.isArray(two),
|
|
69
|
+
'Critical assumptions about the merge functions have been violated. ' +
|
|
70
|
+
'This is the fault of the merge functions themselves, not necessarily ' +
|
|
71
|
+
'the callers.'
|
|
72
|
+
) : invariant(Array.isArray(one) && Array.isArray(two)));
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @param {*} one Object to merge into.
|
|
77
|
+
* @param {*} two Object to merge from.
|
|
78
|
+
*/
|
|
79
|
+
checkMergeObjectArgs: function(one, two) {
|
|
80
|
+
mergeHelpers.checkMergeObjectArg(one);
|
|
81
|
+
mergeHelpers.checkMergeObjectArg(two);
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @param {*} arg
|
|
86
|
+
*/
|
|
87
|
+
checkMergeObjectArg: function(arg) {
|
|
88
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
89
|
+
!isTerminal(arg) && !Array.isArray(arg),
|
|
90
|
+
'Critical assumptions about the merge functions have been violated. ' +
|
|
91
|
+
'This is the fault of the merge functions themselves, not necessarily ' +
|
|
92
|
+
'the callers.'
|
|
93
|
+
) : invariant(!isTerminal(arg) && !Array.isArray(arg)));
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Checks that a merge was not given a circular object or an object that had
|
|
98
|
+
* too great of depth.
|
|
99
|
+
*
|
|
100
|
+
* @param {number} Level of recursion to validate against maximum.
|
|
101
|
+
*/
|
|
102
|
+
checkMergeLevel: function(level) {
|
|
103
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
104
|
+
level < MAX_MERGE_DEPTH,
|
|
105
|
+
'Maximum deep merge depth exceeded. You may be attempting to merge ' +
|
|
106
|
+
'circular structures in an unsupported way.'
|
|
107
|
+
) : invariant(level < MAX_MERGE_DEPTH));
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Checks that the supplied merge strategy is valid.
|
|
112
|
+
*
|
|
113
|
+
* @param {string} Array merge strategy.
|
|
114
|
+
*/
|
|
115
|
+
checkArrayStrategy: function(strategy) {
|
|
116
|
+
("production" !== process.env.NODE_ENV ? invariant(
|
|
117
|
+
strategy === undefined || strategy in mergeHelpers.ArrayStrategies,
|
|
118
|
+
'You must provide an array strategy to deep merge functions to ' +
|
|
119
|
+
'instruct the deep merge how to resolve merging two arrays.'
|
|
120
|
+
) : invariant(strategy === undefined || strategy in mergeHelpers.ArrayStrategies));
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Set of possible behaviors of merge algorithms when encountering two Arrays
|
|
125
|
+
* that must be merged together.
|
|
126
|
+
* - `clobber`: The left `Array` is ignored.
|
|
127
|
+
* - `indexByIndex`: The result is achieved by recursively deep merging at
|
|
128
|
+
* each index. (not yet supported.)
|
|
129
|
+
*/
|
|
130
|
+
ArrayStrategies: keyMirror({
|
|
131
|
+
Clobber: true,
|
|
132
|
+
IndexByIndex: true
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
module.exports = mergeHelpers;
|