| /*! |
| * shallow-clone <https://github.com/jonschlinkert/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; |