版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

64 wiersze
1.8 KiB

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