object.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. "use strict";
  2. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  3. if (k2 === undefined) k2 = k;
  4. var desc = Object.getOwnPropertyDescriptor(m, k);
  5. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  6. desc = { enumerable: true, get: function() { return m[k]; } };
  7. }
  8. Object.defineProperty(o, k2, desc);
  9. }) : (function(o, m, k, k2) {
  10. if (k2 === undefined) k2 = k;
  11. o[k2] = m[k];
  12. }));
  13. var __exportStar = (this && this.__exportStar) || function(m, exports) {
  14. for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
  15. };
  16. Object.defineProperty(exports, "__esModule", { value: true });
  17. exports.flatten = exports.unsetByPath = exports.setByPath = exports.getByPath = exports.isMaliciousProp = exports.getBoolean = exports.getNumber = exports.getValue = exports.ensure = exports.defaultsDeep = exports.defaults = exports.cloneDeep = exports.clone = exports.isPlainObject = exports.isObject = exports.isEmpty = exports.isEqual = exports.merge = exports.pick = exports.has = void 0;
  18. var lodash_es_1 = require("lodash-es");
  19. Object.defineProperty(exports, "has", { enumerable: true, get: function () { return lodash_es_1.has; } });
  20. Object.defineProperty(exports, "pick", { enumerable: true, get: function () { return lodash_es_1.pick; } });
  21. Object.defineProperty(exports, "merge", { enumerable: true, get: function () { return lodash_es_1.merge; } });
  22. Object.defineProperty(exports, "isEqual", { enumerable: true, get: function () { return lodash_es_1.isEqual; } });
  23. Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function () { return lodash_es_1.isEmpty; } });
  24. Object.defineProperty(exports, "isObject", { enumerable: true, get: function () { return lodash_es_1.isObject; } });
  25. Object.defineProperty(exports, "isPlainObject", { enumerable: true, get: function () { return lodash_es_1.isPlainObject; } });
  26. Object.defineProperty(exports, "clone", { enumerable: true, get: function () { return lodash_es_1.clone; } });
  27. Object.defineProperty(exports, "cloneDeep", { enumerable: true, get: function () { return lodash_es_1.cloneDeep; } });
  28. Object.defineProperty(exports, "defaults", { enumerable: true, get: function () { return lodash_es_1.defaults; } });
  29. Object.defineProperty(exports, "defaultsDeep", { enumerable: true, get: function () { return lodash_es_1.defaultsDeep; } });
  30. __exportStar(require("./mixins"), exports);
  31. __exportStar(require("./inherit"), exports);
  32. function ensure(value, defaultValue) {
  33. return value != null ? value : defaultValue;
  34. }
  35. exports.ensure = ensure;
  36. function getValue(obj, key, defaultValue) {
  37. const value = obj != null ? obj[key] : null;
  38. return defaultValue !== undefined ? ensure(value, defaultValue) : value;
  39. }
  40. exports.getValue = getValue;
  41. function getNumber(obj, key, defaultValue) {
  42. let value = obj != null ? obj[key] : null;
  43. if (value == null) {
  44. return defaultValue;
  45. }
  46. value = +value;
  47. if (Number.isNaN(value) || !Number.isFinite(value)) {
  48. return defaultValue;
  49. }
  50. return value;
  51. }
  52. exports.getNumber = getNumber;
  53. function getBoolean(obj, key, defaultValue) {
  54. const value = obj != null ? obj[key] : null;
  55. if (value == null) {
  56. return defaultValue;
  57. }
  58. return !!value;
  59. }
  60. exports.getBoolean = getBoolean;
  61. function isMaliciousProp(prop) {
  62. return prop === '__proto__';
  63. }
  64. exports.isMaliciousProp = isMaliciousProp;
  65. function getByPath(obj, path, delimiter = '/') {
  66. let ret;
  67. const keys = Array.isArray(path) ? path : path.split(delimiter);
  68. if (keys.length) {
  69. ret = obj;
  70. while (keys.length) {
  71. const key = keys.shift();
  72. if (Object(ret) === ret && key && key in ret) {
  73. ret = ret[key];
  74. }
  75. else {
  76. return undefined;
  77. }
  78. }
  79. }
  80. return ret;
  81. }
  82. exports.getByPath = getByPath;
  83. function setByPath(obj, path, value, delimiter = '/') {
  84. const keys = Array.isArray(path) ? path : path.split(delimiter);
  85. const lastKey = keys.pop();
  86. if (lastKey && !isMaliciousProp(lastKey)) {
  87. let diver = obj;
  88. keys.forEach((key) => {
  89. if (!isMaliciousProp(key)) {
  90. if (diver[key] == null) {
  91. diver[key] = {};
  92. }
  93. diver = diver[key];
  94. }
  95. });
  96. diver[lastKey] = value;
  97. }
  98. return obj;
  99. }
  100. exports.setByPath = setByPath;
  101. function unsetByPath(obj, path, delimiter = '/') {
  102. const keys = Array.isArray(path) ? path.slice() : path.split(delimiter);
  103. const propertyToRemove = keys.pop();
  104. if (propertyToRemove) {
  105. if (keys.length > 0) {
  106. const parent = getByPath(obj, keys);
  107. if (parent) {
  108. delete parent[propertyToRemove];
  109. }
  110. }
  111. else {
  112. delete obj[propertyToRemove];
  113. }
  114. }
  115. return obj;
  116. }
  117. exports.unsetByPath = unsetByPath;
  118. // eslint-disable-next-line default-param-last
  119. function flatten(obj, delim = '/', stop) {
  120. const ret = {};
  121. Object.keys(obj).forEach((key) => {
  122. const val = obj[key];
  123. let deep = typeof val === 'object' || Array.isArray(val);
  124. if (deep && stop && stop(val)) {
  125. deep = false;
  126. }
  127. if (deep) {
  128. const flatObject = flatten(val, delim, stop);
  129. Object.keys(flatObject).forEach((flatKey) => {
  130. ret[key + delim + flatKey] = flatObject[flatKey];
  131. });
  132. }
  133. else {
  134. ret[key] = val;
  135. }
  136. });
  137. // eslint-disable-next-line no-restricted-syntax
  138. for (const key in obj) {
  139. if (!Object.prototype.hasOwnProperty.call(obj, key)) {
  140. continue;
  141. }
  142. }
  143. return ret;
  144. }
  145. exports.flatten = flatten;
  146. //# sourceMappingURL=object.js.map