/*! * shallow-clone * * Copyright (c) 2015-2017, Jon Schlinkert. * Released under the MIT License. */ 'use strict'; var isObject = require('is-extendable'); var mixin = require('mixin-object'); var typeOf = require('kind-of'); /** * Shallow copy an object, array or primitive. * * @param {any} `val` * @return {any} */ function clone(val) { var type = typeOf(val); if (clone.hasOwnProperty(type)) { return clone[type](val); } return val; } clone.array = function cloneArray(arr) { return arr.slice(); }; clone.date = function cloneDate(date) { return new Date(+date); }; clone.object = function cloneObject(obj) { if (isObject(obj)) { return mixin({}, obj); } else { return obj; } }; clone.regexp = function cloneRegExp(re) { var flags = ''; flags += re.multiline ? 'm' : ''; flags += re.global ? 'g' : ''; flags += re.ignorecase ? 'i' : ''; return new RegExp(re.source, flags); }; /** * Expose `clone` */ module.exports = clone;