CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes45downloads
_baseClone.js167 linesDownload Raw Back to lodash
1var Stack = require('./_Stack'),2    arrayEach = require('./_arrayEach'),3    assignValue = require('./_assignValue'),4    baseAssign = require('./_baseAssign'),5    baseAssignIn = require('./_baseAssignIn'),6    cloneBuffer = require('./_cloneBuffer'),7    copyArray = require('./_copyArray'),8    copySymbols = require('./_copySymbols'),9    copySymbolsIn = require('./_copySymbolsIn'),10    getAllKeys = require('./_getAllKeys'),11    getAllKeysIn = require('./_getAllKeysIn'),12    getTag = require('./_getTag'),13    initCloneArray = require('./_initCloneArray'),14    initCloneByTag = require('./_initCloneByTag'),15    initCloneObject = require('./_initCloneObject'),16    isArray = require('./isArray'),17    isBuffer = require('./isBuffer'),18    isMap = require('./isMap'),19    isObject = require('./isObject'),20    isSet = require('./isSet'),21    keys = require('./keys'),22    keysIn = require('./keysIn');23 24/** Used to compose bitmasks for cloning. */25var CLONE_DEEP_FLAG = 1,26    CLONE_FLAT_FLAG = 2,27    CLONE_SYMBOLS_FLAG = 4;28 29/** `Object#toString` result references. */30var argsTag = '[object Arguments]',31    arrayTag = '[object Array]',32    boolTag = '[object Boolean]',33    dateTag = '[object Date]',34    errorTag = '[object Error]',35    funcTag = '[object Function]',36    genTag = '[object GeneratorFunction]',37    mapTag = '[object Map]',38    numberTag = '[object Number]',39    objectTag = '[object Object]',40    regexpTag = '[object RegExp]',41    setTag = '[object Set]',42    stringTag = '[object String]',43    symbolTag = '[object Symbol]',44    weakMapTag = '[object WeakMap]';45 46var arrayBufferTag = '[object ArrayBuffer]',47    dataViewTag = '[object DataView]',48    float32Tag = '[object Float32Array]',49    float64Tag = '[object Float64Array]',50    int8Tag = '[object Int8Array]',51    int16Tag = '[object Int16Array]',52    int32Tag = '[object Int32Array]',53    uint8Tag = '[object Uint8Array]',54    uint8ClampedTag = '[object Uint8ClampedArray]',55    uint16Tag = '[object Uint16Array]',56    uint32Tag = '[object Uint32Array]';57 58/** Used to identify `toStringTag` values supported by `_.clone`. */59var cloneableTags = {};60cloneableTags[argsTag] = cloneableTags[arrayTag] =61cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =62cloneableTags[boolTag] = cloneableTags[dateTag] =63cloneableTags[float32Tag] = cloneableTags[float64Tag] =64cloneableTags[int8Tag] = cloneableTags[int16Tag] =65cloneableTags[int32Tag] = cloneableTags[mapTag] =66cloneableTags[numberTag] = cloneableTags[objectTag] =67cloneableTags[regexpTag] = cloneableTags[setTag] =68cloneableTags[stringTag] = cloneableTags[symbolTag] =69cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =70cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;71cloneableTags[errorTag] = cloneableTags[funcTag] =72cloneableTags[weakMapTag] = false;73 74/**75 * The base implementation of `_.clone` and `_.cloneDeep` which tracks76 * traversed objects.77 *78 * @private79 * @param {*} value The value to clone.80 * @param {boolean} bitmask The bitmask flags.81 *  1 - Deep clone82 *  2 - Flatten inherited properties83 *  4 - Clone symbols84 * @param {Function} [customizer] The function to customize cloning.85 * @param {string} [key] The key of `value`.86 * @param {Object} [object] The parent object of `value`.87 * @param {Object} [stack] Tracks traversed objects and their clone counterparts.88 * @returns {*} Returns the cloned value.89 */90function baseClone(value, bitmask, customizer, key, object, stack) {91  var result,92      isDeep = bitmask & CLONE_DEEP_FLAG,93      isFlat = bitmask & CLONE_FLAT_FLAG,94      isFull = bitmask & CLONE_SYMBOLS_FLAG;95 96  if (customizer) {97    result = object ? customizer(value, key, object, stack) : customizer(value);98  }99  if (result !== undefined) {100    return result;101  }102  if (!isObject(value)) {103    return value;104  }105  var isArr = isArray(value);106  if (isArr) {107    result = initCloneArray(value);108    if (!isDeep) {109      return copyArray(value, result);110    }111  } else {112    var tag = getTag(value),113        isFunc = tag == funcTag || tag == genTag;114 115    if (isBuffer(value)) {116      return cloneBuffer(value, isDeep);117    }118    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {119      result = (isFlat || isFunc) ? {} : initCloneObject(value);120      if (!isDeep) {121        return isFlat122          ? copySymbolsIn(value, baseAssignIn(result, value))123          : copySymbols(value, baseAssign(result, value));124      }125    } else {126      if (!cloneableTags[tag]) {127        return object ? value : {};128      }129      result = initCloneByTag(value, tag, isDeep);130    }131  }132  // Check for circular references and return its corresponding clone.133  stack || (stack = new Stack);134  var stacked = stack.get(value);135  if (stacked) {136    return stacked;137  }138  stack.set(value, result);139 140  if (isSet(value)) {141    value.forEach(function(subValue) {142      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));143    });144  } else if (isMap(value)) {145    value.forEach(function(subValue, key) {146      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));147    });148  }149 150  var keysFunc = isFull151    ? (isFlat ? getAllKeysIn : getAllKeys)152    : (isFlat ? keysIn : keys);153 154  var props = isArr ? undefined : keysFunc(value);155  arrayEach(props || value, function(subValue, key) {156    if (props) {157      key = subValue;158      subValue = value[key];159    }160    // Recursively populate clone (susceptible to call stack limits).161    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));162  });163  return result;164}165 166module.exports = baseClone;167 
basant307/AI_Governance_Project · CoolFace