57 lines
1 KiB
JavaScript
57 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;
|