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