defu.cjs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. function isObject(val) {
  4. return val !== null && typeof val === "object";
  5. }
  6. function _defu(baseObj, defaults, namespace = ".", merger) {
  7. if (!isObject(defaults)) {
  8. return _defu(baseObj, {}, namespace, merger);
  9. }
  10. const obj = Object.assign({}, defaults);
  11. for (const key in baseObj) {
  12. if (key === "__proto__" || key === "constructor") {
  13. continue;
  14. }
  15. const val = baseObj[key];
  16. if (val === null || val === void 0) {
  17. continue;
  18. }
  19. if (merger && merger(obj, key, val, namespace)) {
  20. continue;
  21. }
  22. if (Array.isArray(val) && Array.isArray(obj[key])) {
  23. obj[key] = val.concat(obj[key]);
  24. } else if (isObject(val) && isObject(obj[key])) {
  25. obj[key] = _defu(val, obj[key], (namespace ? `${namespace}.` : "") + key.toString(), merger);
  26. } else {
  27. obj[key] = val;
  28. }
  29. }
  30. return obj;
  31. }
  32. function createDefu(merger) {
  33. return (...args) => args.reduce((p, c) => _defu(p, c, "", merger), {});
  34. }
  35. const defu = createDefu();
  36. const defuFn = createDefu((obj, key, currentValue, _namespace) => {
  37. if (typeof obj[key] !== "undefined" && typeof currentValue === "function") {
  38. obj[key] = currentValue(obj[key]);
  39. return true;
  40. }
  41. });
  42. const defuArrayFn = createDefu((obj, key, currentValue, _namespace) => {
  43. if (Array.isArray(obj[key]) && typeof currentValue === "function") {
  44. obj[key] = currentValue(obj[key]);
  45. return true;
  46. }
  47. });
  48. exports.createDefu = createDefu;
  49. exports["default"] = defu;
  50. exports.defu = defu;
  51. exports.defuArrayFn = defuArrayFn;
  52. exports.defuFn = defuFn;