58 lines
1 KiB
JavaScript
58 lines
1 KiB
JavaScript
|
/*!
|
||
|
* 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;
|