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
			| 
								 
											4 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;
							 |