index.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*!
  2. * shallow-clone <https://github.com/jonschlinkert/shallow-clone>
  3. *
  4. * Copyright (c) 2015-2017, Jon Schlinkert.
  5. * Released under the MIT License.
  6. */
  7. 'use strict';
  8. var isObject = require('is-extendable');
  9. var mixin = require('mixin-object');
  10. var typeOf = require('kind-of');
  11. /**
  12. * Shallow copy an object, array or primitive.
  13. *
  14. * @param {any} `val`
  15. * @return {any}
  16. */
  17. function clone(val) {
  18. var type = typeOf(val);
  19. if (clone.hasOwnProperty(type)) {
  20. return clone[type](val);
  21. }
  22. return val;
  23. }
  24. clone.array = function cloneArray(arr) {
  25. return arr.slice();
  26. };
  27. clone.date = function cloneDate(date) {
  28. return new Date(+date);
  29. };
  30. clone.object = function cloneObject(obj) {
  31. if (isObject(obj)) {
  32. return mixin({}, obj);
  33. } else {
  34. return obj;
  35. }
  36. };
  37. clone.regexp = function cloneRegExp(re) {
  38. var flags = '';
  39. flags += re.multiline ? 'm' : '';
  40. flags += re.global ? 'g' : '';
  41. flags += re.ignorecase ? 'i' : '';
  42. return new RegExp(re.source, flags);
  43. };
  44. /**
  45. * Expose `clone`
  46. */
  47. module.exports = clone;