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.
		
		
		
		
		
			
		
			
				
					84 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					84 lines
				
				1.8 KiB
			| 
											3 years ago
										 | /*! | ||
|  |  * 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; |