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