| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | 
							- var Stack = require('./_Stack'),
 
-     arrayEach = require('./_arrayEach'),
 
-     assignValue = require('./_assignValue'),
 
-     baseAssign = require('./_baseAssign'),
 
-     baseAssignIn = require('./_baseAssignIn'),
 
-     cloneBuffer = require('./_cloneBuffer'),
 
-     copyArray = require('./_copyArray'),
 
-     copySymbols = require('./_copySymbols'),
 
-     copySymbolsIn = require('./_copySymbolsIn'),
 
-     getAllKeys = require('./_getAllKeys'),
 
-     getAllKeysIn = require('./_getAllKeysIn'),
 
-     getTag = require('./_getTag'),
 
-     initCloneArray = require('./_initCloneArray'),
 
-     initCloneByTag = require('./_initCloneByTag'),
 
-     initCloneObject = require('./_initCloneObject'),
 
-     isArray = require('./isArray'),
 
-     isBuffer = require('./isBuffer'),
 
-     isMap = require('./isMap'),
 
-     isObject = require('./isObject'),
 
-     isSet = require('./isSet'),
 
-     keys = require('./keys'),
 
-     keysIn = require('./keysIn');
 
- /** Used to compose bitmasks for cloning. */
 
- var CLONE_DEEP_FLAG = 1,
 
-     CLONE_FLAT_FLAG = 2,
 
-     CLONE_SYMBOLS_FLAG = 4;
 
- /** `Object#toString` result references. */
 
- var argsTag = '[object Arguments]',
 
-     arrayTag = '[object Array]',
 
-     boolTag = '[object Boolean]',
 
-     dateTag = '[object Date]',
 
-     errorTag = '[object Error]',
 
-     funcTag = '[object Function]',
 
-     genTag = '[object GeneratorFunction]',
 
-     mapTag = '[object Map]',
 
-     numberTag = '[object Number]',
 
-     objectTag = '[object Object]',
 
-     regexpTag = '[object RegExp]',
 
-     setTag = '[object Set]',
 
-     stringTag = '[object String]',
 
-     symbolTag = '[object Symbol]',
 
-     weakMapTag = '[object WeakMap]';
 
- var arrayBufferTag = '[object ArrayBuffer]',
 
-     dataViewTag = '[object DataView]',
 
-     float32Tag = '[object Float32Array]',
 
-     float64Tag = '[object Float64Array]',
 
-     int8Tag = '[object Int8Array]',
 
-     int16Tag = '[object Int16Array]',
 
-     int32Tag = '[object Int32Array]',
 
-     uint8Tag = '[object Uint8Array]',
 
-     uint8ClampedTag = '[object Uint8ClampedArray]',
 
-     uint16Tag = '[object Uint16Array]',
 
-     uint32Tag = '[object Uint32Array]';
 
- /** Used to identify `toStringTag` values supported by `_.clone`. */
 
- var cloneableTags = {};
 
- cloneableTags[argsTag] = cloneableTags[arrayTag] =
 
- cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
 
- cloneableTags[boolTag] = cloneableTags[dateTag] =
 
- cloneableTags[float32Tag] = cloneableTags[float64Tag] =
 
- cloneableTags[int8Tag] = cloneableTags[int16Tag] =
 
- cloneableTags[int32Tag] = cloneableTags[mapTag] =
 
- cloneableTags[numberTag] = cloneableTags[objectTag] =
 
- cloneableTags[regexpTag] = cloneableTags[setTag] =
 
- cloneableTags[stringTag] = cloneableTags[symbolTag] =
 
- cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
 
- cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
 
- cloneableTags[errorTag] = cloneableTags[funcTag] =
 
- cloneableTags[weakMapTag] = false;
 
- /**
 
-  * The base implementation of `_.clone` and `_.cloneDeep` which tracks
 
-  * traversed objects.
 
-  *
 
-  * @private
 
-  * @param {*} value The value to clone.
 
-  * @param {boolean} bitmask The bitmask flags.
 
-  *  1 - Deep clone
 
-  *  2 - Flatten inherited properties
 
-  *  4 - Clone symbols
 
-  * @param {Function} [customizer] The function to customize cloning.
 
-  * @param {string} [key] The key of `value`.
 
-  * @param {Object} [object] The parent object of `value`.
 
-  * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
 
-  * @returns {*} Returns the cloned value.
 
-  */
 
- function baseClone(value, bitmask, customizer, key, object, stack) {
 
-   var result,
 
-       isDeep = bitmask & CLONE_DEEP_FLAG,
 
-       isFlat = bitmask & CLONE_FLAT_FLAG,
 
-       isFull = bitmask & CLONE_SYMBOLS_FLAG;
 
-   if (customizer) {
 
-     result = object ? customizer(value, key, object, stack) : customizer(value);
 
-   }
 
-   if (result !== undefined) {
 
-     return result;
 
-   }
 
-   if (!isObject(value)) {
 
-     return value;
 
-   }
 
-   var isArr = isArray(value);
 
-   if (isArr) {
 
-     result = initCloneArray(value);
 
-     if (!isDeep) {
 
-       return copyArray(value, result);
 
-     }
 
-   } else {
 
-     var tag = getTag(value),
 
-         isFunc = tag == funcTag || tag == genTag;
 
-     if (isBuffer(value)) {
 
-       return cloneBuffer(value, isDeep);
 
-     }
 
-     if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
 
-       result = (isFlat || isFunc) ? {} : initCloneObject(value);
 
-       if (!isDeep) {
 
-         return isFlat
 
-           ? copySymbolsIn(value, baseAssignIn(result, value))
 
-           : copySymbols(value, baseAssign(result, value));
 
-       }
 
-     } else {
 
-       if (!cloneableTags[tag]) {
 
-         return object ? value : {};
 
-       }
 
-       result = initCloneByTag(value, tag, isDeep);
 
-     }
 
-   }
 
-   // Check for circular references and return its corresponding clone.
 
-   stack || (stack = new Stack);
 
-   var stacked = stack.get(value);
 
-   if (stacked) {
 
-     return stacked;
 
-   }
 
-   stack.set(value, result);
 
-   if (isSet(value)) {
 
-     value.forEach(function(subValue) {
 
-       result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
 
-     });
 
-   } else if (isMap(value)) {
 
-     value.forEach(function(subValue, key) {
 
-       result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
 
-     });
 
-   }
 
-   var keysFunc = isFull
 
-     ? (isFlat ? getAllKeysIn : getAllKeys)
 
-     : (isFlat ? keysIn : keys);
 
-   var props = isArr ? undefined : keysFunc(value);
 
-   arrayEach(props || value, function(subValue, key) {
 
-     if (props) {
 
-       key = subValue;
 
-       subValue = value[key];
 
-     }
 
-     // Recursively populate clone (susceptible to call stack limits).
 
-     assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
 
-   });
 
-   return result;
 
- }
 
- module.exports = baseClone;
 
 
  |