[React Native] Move copyProperties and mergeHelpers to github dir
This commit is contained in:
parent
3d7fbc05ea
commit
c5e6f550ad
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
* @generated SignedSource<<e8e5ba644b047d0654ca54a100d2f0f3>>
|
||||||
|
*
|
||||||
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
* !! This file is a check-in of a static_upstream project! !!
|
||||||
|
* !! !!
|
||||||
|
* !! You should not modify this file directly. Instead: !!
|
||||||
|
* !! 1) Use `fjs use-upstream` to temporarily replace this with !!
|
||||||
|
* !! the latest version from upstream. !!
|
||||||
|
* !! 2) Make your changes, test them, etc. !!
|
||||||
|
* !! 3) Use `fjs push-upstream` to copy your changes back to !!
|
||||||
|
* !! static_upstream. !!
|
||||||
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
*
|
||||||
|
* @providesModule copyProperties
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy properties from one or more objects (up to 5) into the first object.
|
||||||
|
* This is a shallow copy. It mutates the first object and also returns it.
|
||||||
|
*
|
||||||
|
* NOTE: `arguments` has a very significant performance penalty, which is why
|
||||||
|
* we don't support unlimited arguments.
|
||||||
|
*/
|
||||||
|
function copyProperties(obj, a, b, c, d, e, f) {
|
||||||
|
obj = obj || {};
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
if (f) {
|
||||||
|
throw new Error('Too many arguments passed to copyProperties');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var args = [a, b, c, d, e];
|
||||||
|
var ii = 0, v;
|
||||||
|
while (args[ii]) {
|
||||||
|
v = args[ii++];
|
||||||
|
for (var k in v) {
|
||||||
|
obj[k] = v[k];
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE ignores toString in object iteration.. See:
|
||||||
|
// webreflection.blogspot.com/2007/07/quick-fix-internet-explorer-and.html
|
||||||
|
if (v.hasOwnProperty && v.hasOwnProperty('toString') &&
|
||||||
|
(typeof v.toString != 'undefined') && (obj.toString !== v.toString)) {
|
||||||
|
obj.toString = v.toString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = copyProperties;
|
|
@ -0,0 +1,160 @@
|
||||||
|
/**
|
||||||
|
* @generated SignedSource<<b68d78236d45828b3f7f7fcc740782a9>>
|
||||||
|
*
|
||||||
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
* !! This file is a check-in of a static_upstream project! !!
|
||||||
|
* !! !!
|
||||||
|
* !! You should not modify this file directly. Instead: !!
|
||||||
|
* !! 1) Use `fjs use-upstream` to temporarily replace this with !!
|
||||||
|
* !! the latest version from upstream. !!
|
||||||
|
* !! 2) Make your changes, test them, etc. !!
|
||||||
|
* !! 3) Use `fjs push-upstream` to copy your changes back to !!
|
||||||
|
* !! static_upstream. !!
|
||||||
|
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
*
|
||||||
|
* Copyright 2013-2014 Facebook, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* @providesModule mergeHelpers
|
||||||
|
*
|
||||||
|
* requiresPolyfills: Array.isArray
|
||||||
|
*/
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var invariant = require('invariant');
|
||||||
|
var keyMirror = require('keyMirror');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum number of levels to traverse. Will catch circular structures.
|
||||||
|
* @const
|
||||||
|
*/
|
||||||
|
var MAX_MERGE_DEPTH = 36;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We won't worry about edge cases like new String('x') or new Boolean(true).
|
||||||
|
* Functions are considered terminals, and arrays are not.
|
||||||
|
* @param {*} o The item/object/value to test.
|
||||||
|
* @return {boolean} true iff the argument is a terminal.
|
||||||
|
*/
|
||||||
|
var isTerminal = function(o) {
|
||||||
|
return typeof o !== 'object' || o === null;
|
||||||
|
};
|
||||||
|
|
||||||
|
var mergeHelpers = {
|
||||||
|
|
||||||
|
MAX_MERGE_DEPTH: MAX_MERGE_DEPTH,
|
||||||
|
|
||||||
|
isTerminal: isTerminal,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts null/undefined values into empty object.
|
||||||
|
*
|
||||||
|
* @param {?Object=} arg Argument to be normalized (nullable optional)
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
normalizeMergeArg: function(arg) {
|
||||||
|
return arg === undefined || arg === null ? {} : arg;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If merging Arrays, a merge strategy *must* be supplied. If not, it is
|
||||||
|
* likely the caller's fault. If this function is ever called with anything
|
||||||
|
* but `one` and `two` being `Array`s, it is the fault of the merge utilities.
|
||||||
|
*
|
||||||
|
* @param {*} one Array to merge into.
|
||||||
|
* @param {*} two Array to merge from.
|
||||||
|
*/
|
||||||
|
checkMergeArrayArgs: function(one, two) {
|
||||||
|
invariant(
|
||||||
|
Array.isArray(one) && Array.isArray(two),
|
||||||
|
'Tried to merge arrays, instead got %s and %s.',
|
||||||
|
one,
|
||||||
|
two
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {*} one Object to merge into.
|
||||||
|
* @param {*} two Object to merge from.
|
||||||
|
*/
|
||||||
|
checkMergeObjectArgs: function(one, two) {
|
||||||
|
mergeHelpers.checkMergeObjectArg(one);
|
||||||
|
mergeHelpers.checkMergeObjectArg(two);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {*} arg
|
||||||
|
*/
|
||||||
|
checkMergeObjectArg: function(arg) {
|
||||||
|
invariant(
|
||||||
|
!isTerminal(arg) && !Array.isArray(arg),
|
||||||
|
'Tried to merge an object, instead got %s.',
|
||||||
|
arg
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {*} arg
|
||||||
|
*/
|
||||||
|
checkMergeIntoObjectArg: function(arg) {
|
||||||
|
invariant(
|
||||||
|
(!isTerminal(arg) || typeof arg === 'function') && !Array.isArray(arg),
|
||||||
|
'Tried to merge into an object, instead got %s.',
|
||||||
|
arg
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that a merge was not given a circular object or an object that had
|
||||||
|
* too great of depth.
|
||||||
|
*
|
||||||
|
* @param {number} Level of recursion to validate against maximum.
|
||||||
|
*/
|
||||||
|
checkMergeLevel: function(level) {
|
||||||
|
invariant(
|
||||||
|
level < MAX_MERGE_DEPTH,
|
||||||
|
'Maximum deep merge depth exceeded. You may be attempting to merge ' +
|
||||||
|
'circular structures in an unsupported way.'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that the supplied merge strategy is valid.
|
||||||
|
*
|
||||||
|
* @param {string} Array merge strategy.
|
||||||
|
*/
|
||||||
|
checkArrayStrategy: function(strategy) {
|
||||||
|
invariant(
|
||||||
|
strategy === undefined || strategy in mergeHelpers.ArrayStrategies,
|
||||||
|
'You must provide an array strategy to deep merge functions to ' +
|
||||||
|
'instruct the deep merge how to resolve merging two arrays.'
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of possible behaviors of merge algorithms when encountering two Arrays
|
||||||
|
* that must be merged together.
|
||||||
|
* - `clobber`: The left `Array` is ignored.
|
||||||
|
* - `indexByIndex`: The result is achieved by recursively deep merging at
|
||||||
|
* each index. (not yet supported.)
|
||||||
|
*/
|
||||||
|
ArrayStrategies: keyMirror({
|
||||||
|
Clobber: true,
|
||||||
|
IndexByIndex: true
|
||||||
|
})
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = mergeHelpers;
|
Loading…
Reference in New Issue