You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							1.8 KiB
						
					
					
				/*! | 
						|
 * shallow-clone <https://github.com/jonschlinkert/shallow-clone> | 
						|
 * | 
						|
 * Copyright (c) 2015-present, Jon Schlinkert. | 
						|
 * Released under the MIT License. | 
						|
 */ | 
						|
 | 
						|
'use strict'; | 
						|
 | 
						|
const valueOf = Symbol.prototype.valueOf; | 
						|
const typeOf = require('kind-of'); | 
						|
 | 
						|
function clone(val, deep) { | 
						|
  switch (typeOf(val)) { | 
						|
    case 'array': | 
						|
      return val.slice(); | 
						|
    case 'object': | 
						|
      return Object.assign({}, val); | 
						|
    case 'date': | 
						|
      return new val.constructor(Number(val)); | 
						|
    case 'map': | 
						|
      return new Map(val); | 
						|
    case 'set': | 
						|
      return new Set(val); | 
						|
    case 'buffer': | 
						|
      return cloneBuffer(val); | 
						|
    case 'symbol': | 
						|
      return cloneSymbol(val); | 
						|
    case 'arraybuffer': | 
						|
      return cloneArrayBuffer(val); | 
						|
    case 'float32array': | 
						|
    case 'float64array': | 
						|
    case 'int16array': | 
						|
    case 'int32array': | 
						|
    case 'int8array': | 
						|
    case 'uint16array': | 
						|
    case 'uint32array': | 
						|
    case 'uint8clampedarray': | 
						|
    case 'uint8array': | 
						|
      return cloneTypedArray(val); | 
						|
    case 'regexp': | 
						|
      return cloneRegExp(val); | 
						|
    case 'error': | 
						|
      return Object.create(val); | 
						|
    default: { | 
						|
      return val; | 
						|
    } | 
						|
  } | 
						|
} | 
						|
 | 
						|
function cloneRegExp(val) { | 
						|
  const flags = val.flags !== void 0 ? val.flags : (/\w+$/.exec(val) || void 0); | 
						|
  const re = new val.constructor(val.source, flags); | 
						|
  re.lastIndex = val.lastIndex; | 
						|
  return re; | 
						|
} | 
						|
 | 
						|
function cloneArrayBuffer(val) { | 
						|
  const res = new val.constructor(val.byteLength); | 
						|
  new Uint8Array(res).set(new Uint8Array(val)); | 
						|
  return res; | 
						|
} | 
						|
 | 
						|
function cloneTypedArray(val, deep) { | 
						|
  return new val.constructor(val.buffer, val.byteOffset, val.length); | 
						|
} | 
						|
 | 
						|
function cloneBuffer(val) { | 
						|
  const len = val.length; | 
						|
  const buf = Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : Buffer.from(len); | 
						|
  val.copy(buf); | 
						|
  return buf; | 
						|
} | 
						|
 | 
						|
function cloneSymbol(val) { | 
						|
  return valueOf ? Object(valueOf.call(val)) : {}; | 
						|
} | 
						|
 | 
						|
/** | 
						|
 * Expose `clone` | 
						|
 */ | 
						|
 | 
						|
module.exports = clone;
 | 
						|
 |