Sha256: f2e63bdab12c76bd239b36b1e2e7bf825590651f26b99a5f485a2e4ada98d6d0

Contents?: true

Size: 1.84 KB

Versions: 34

Compression:

Stored size: 1.84 KB

Contents

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

Version data entries

34 entries across 33 versions & 9 rubygems

Version Path
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/shallow-clone/index.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/shallow-clone/index.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/shallow-clone/index.js
tang-0.2.0 spec/tang_app/node_modules/shallow-clone/index.js
tang-0.1.0 spec/tang_app/node_modules/shallow-clone/index.js
tang-0.0.9 spec/tang_app/node_modules/shallow-clone/index.js
enju_library-0.3.8 spec/dummy/node_modules/shallow-clone/index.js
jester-data-8.0.0 node_modules/shallow-clone/index.js
ezii-os-5.2.1 node_modules/shallow-clone/index.js
ezii-os-2.0.1 node_modules/shallow-clone/index.js
ezii-os-1.1.0 node_modules/shallow-clone/index.js
ezii-os-1.0.0 node_modules/shallow-clone/index.js
ezii-os-0.0.0.1.0 node_modules/shallow-clone/index.js
ezii-os-0.0.0.0.1 node_modules/shallow-clone/index.js