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
						
					
					
				| /*!
 | |
|  * 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;
 |