ut2 1.15.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +8 -0
  2. package/dist/ut2.js +199 -26
  3. package/dist/ut2.js.map +1 -1
  4. package/dist/ut2.min.js +1 -1
  5. package/dist/ut2.min.js.map +1 -1
  6. package/es/fromPathPairs.js +25 -0
  7. package/es/get.js +20 -0
  8. package/es/guard.js +2 -1
  9. package/es/index.js +7 -0
  10. package/es/internals/helpers.js +2 -2
  11. package/es/internals/isEqualDeep.js +1 -1
  12. package/es/internals/isIndex.js +12 -0
  13. package/es/internals/native.js +24 -23
  14. package/es/internals/stringToPath.js +15 -0
  15. package/es/memoize.js +47 -0
  16. package/es/merge.js +1 -1
  17. package/es/pathPairs.js +25 -0
  18. package/es/set.js +33 -0
  19. package/es/toPath.js +20 -0
  20. package/es/unset.js +15 -0
  21. package/lib/fromPathPairs.js +27 -0
  22. package/lib/get.js +22 -0
  23. package/lib/guard.js +2 -1
  24. package/lib/index.js +14 -0
  25. package/lib/internals/helpers.js +1 -1
  26. package/lib/internals/isIndex.js +14 -0
  27. package/lib/internals/native.js +24 -23
  28. package/lib/internals/stringToPath.js +17 -0
  29. package/lib/memoize.js +49 -0
  30. package/lib/merge.js +1 -1
  31. package/lib/pathPairs.js +27 -0
  32. package/lib/set.js +35 -0
  33. package/lib/toPath.js +22 -0
  34. package/lib/unset.js +17 -0
  35. package/package.json +26 -29
  36. package/types/camelCase.d.ts +1 -1
  37. package/types/ceil.d.ts +1 -1
  38. package/types/compact.d.ts +1 -1
  39. package/types/eq.d.ts +1 -1
  40. package/types/escape.d.ts +1 -1
  41. package/types/escapeRegExp.d.ts +1 -1
  42. package/types/floor.d.ts +1 -1
  43. package/types/fromPathPairs.d.ts +42 -0
  44. package/types/get.d.ts +21 -0
  45. package/types/index.d.ts +7 -0
  46. package/types/internals/isIndex.d.ts +17 -0
  47. package/types/internals/native.d.ts +25 -25
  48. package/types/internals/root.d.ts +1 -1
  49. package/types/internals/stringToPath.d.ts +9 -0
  50. package/types/internals/types.d.ts +1 -0
  51. package/types/invert.d.ts +1 -1
  52. package/types/isBlob.d.ts +2 -2
  53. package/types/isFile.d.ts +1 -1
  54. package/types/isLength.d.ts +1 -1
  55. package/types/isObject.d.ts +1 -1
  56. package/types/isTypedArray.d.ts +1 -1
  57. package/types/kebabCase.d.ts +1 -1
  58. package/types/memoize.d.ts +50 -0
  59. package/types/merge.d.ts +1 -1
  60. package/types/mergeObject.d.ts +1 -1
  61. package/types/move.d.ts +1 -1
  62. package/types/omitBy.d.ts +1 -1
  63. package/types/orderBy.d.ts +1 -1
  64. package/types/partition.d.ts +2 -2
  65. package/types/pascalCase.d.ts +1 -1
  66. package/types/pathPairs.d.ts +30 -0
  67. package/types/pickBy.d.ts +1 -1
  68. package/types/round.d.ts +1 -1
  69. package/types/set.d.ts +24 -0
  70. package/types/snakeCase.d.ts +1 -1
  71. package/types/toLength.d.ts +1 -1
  72. package/types/toPath.d.ts +17 -0
  73. package/types/unset.d.ts +20 -0
  74. package/types/words.d.ts +1 -1
package/README.md CHANGED
@@ -94,6 +94,7 @@ const debounced = debounce(() => {
94
94
  - [curry](https://caijf.github.io/ut2/module-Function.html#.curry) - 柯里化函数。
95
95
  - [debounce](https://caijf.github.io/ut2/module-Function.html#.debounce) - 防抖函数。
96
96
  - [delay](https://caijf.github.io/ut2/module-Function.html#.delay) - 延迟触发。
97
+ - [memoize](https://caijf.github.io/ut2/module-Function.html#.memoize) - 缓存函数结果。
97
98
  - [negate](https://caijf.github.io/ut2/module-Function.html#.negate) - 否定断言。
98
99
  - [once](https://caijf.github.io/ut2/module-Function.html#.once) - 只执行一次。
99
100
  - [partial](https://caijf.github.io/ut2/module-Function.html#.partial) - 预设部分参数。
@@ -154,14 +155,20 @@ const debounced = debounce(() => {
154
155
  - [allKeys](https://caijf.github.io/ut2/module-Object.html#.allKeys) - 对象自身的可枚举属性(包含 `Symbol` 属性)。
155
156
  - [allKeysIn](https://caijf.github.io/ut2/module-Object.html#.allKeysIn) - 对象自身及继承的可枚举属性(包含 `Symbol` 属性)。
156
157
  - [findKey](https://caijf.github.io/ut2/module-Object.html#.findKey) - 查找对象的键。
158
+ - [fromPathPairs](https://caijf.github.io/ut2/module-Object.html#.fromPathPairs) - 将属性路径/值对的数组转为对象。
159
+ - [get](https://caijf.github.io/ut2/module-Object.html#.get) - 获取对象路径的值。
157
160
  - [invert](https://caijf.github.io/ut2/module-Object.html#.invert) - 对象自身的可枚举属性(包含 `Symbol` 属性)和值反转。
158
161
  - [keys](https://caijf.github.io/ut2/module-Object.html#.keys) - 对象自身的可枚举属性(不包含 `Symbol` 属性)。
159
162
  - [keysIn](https://caijf.github.io/ut2/module-Object.html#.keysIn) - 对象自身及继承的可枚举属性(不包含 `Symbol` 属性)。
160
163
  - [merge](https://caijf.github.io/ut2/module-Object.html#.merge) - 递归对象自身的可枚举属性(包含 `Symbol` 属性)或数组进行合并。
164
+ - [mergeObject](https://caijf.github.io/ut2/module-Object.html#.merge) - 递归对象自身的可枚举属性(包含 `Symbol` 属性)进行合并,支持多个目标对象参数。
161
165
  - [omit](https://caijf.github.io/ut2/module-Object.html#.omit) - 排除部分属性。
162
166
  - [omitBy](https://caijf.github.io/ut2/module-Object.html#.omitBy) - 根据方法,排除部分属性。
167
+ - [pathPairs](https://caijf.github.io/ut2/module-Object.html#.pathPairs) - 将对象转为属性路径/值对的数组。
163
168
  - [pick](https://caijf.github.io/ut2/module-Object.html#.pick) - 选择部分属性。
164
169
  - [pickBy](https://caijf.github.io/ut2/module-Object.html#.pickBy) - 根据方法,选择部分属性。
170
+ - [set](https://caijf.github.io/ut2/module-Object.html#.set) - 设置对象属性路径值。
171
+ - [unset](https://caijf.github.io/ut2/module-Object.html#.unset) - 删除对象路径的属性。
165
172
  - [String](https://caijf.github.io/ut2/module-String.html) 字符串
166
173
  - [camelCase](https://caijf.github.io/ut2/module-String.html#.camelCase) - 驼峰小写。
167
174
  - [capitalize](https://caijf.github.io/ut2/module-String.html#.capitalize) - 首字母大写,其余小写。
@@ -199,6 +206,7 @@ const debounced = debounce(() => {
199
206
  - [toInteger](https://caijf.github.io/ut2/module-Util.html#.toInteger) - 转为整数。
200
207
  - [toLength](https://caijf.github.io/ut2/module-Util.html#.toLength) - 转为数组长度整数。
201
208
  - [toNumber](https://caijf.github.io/ut2/module-Util.html#.toNumber) - 转为数字。
209
+ - [toPath](https://caijf.github.io/ut2/module-Util.html#.toPath) - 转为属性路径数组。
202
210
  - [toSafeInteger](https://caijf.github.io/ut2/module-Util.html#.toSafeInteger) - 转为安全整数。
203
211
  - [toString](https://caijf.github.io/ut2/module-Util.html#.toString) - 转为字符串。
204
212
  - [tryit](https://caijf.github.io/ut2/module-Util.html#.tryit) - 包装函数为错误优先函数。
package/dist/ut2.js CHANGED
@@ -35,29 +35,30 @@
35
35
  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
36
36
  var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
37
37
  var MAX_ARRAY_LENGTH = 4294967295;
38
- var bigIntTag = '[object BigInt]';
39
- var numberTag = '[object Number]';
40
- var booleanTag = '[object Boolean]';
41
- var stringTag = '[object String]';
42
- var dateTag = '[object Date]';
43
- var regExpTag = '[object RegExp]';
44
- var symbolTag = '[object Symbol]';
45
- var errorTag = '[object Error]';
46
- var arrayBufferTag = '[object ArrayBuffer]';
47
- var argumentsTag = '[object Arguments]';
48
- var arrayTag = '[object Array]';
49
- var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return '[object ' + item + ']'; });
50
- var weakSetTag = '[object WeakSet]';
51
- var blobTag = '[object Blob]';
52
- var fileTag = '[object File]';
53
- var domExceptionTag = '[object DOMException]';
54
- var objectTag = '[object Object]';
55
- var dataViewTag = '[object DataView]';
56
- var mapTag = '[object Map]';
57
- var promiseTag = '[object Promise]';
58
- var setTag = '[object Set]';
59
- var weakMapTag = '[object WeakMap]';
60
- var windowTag = '[object Window]';
38
+ var tagPrefix = '[object ';
39
+ var bigIntTag = tagPrefix + 'BigInt]';
40
+ var numberTag = tagPrefix + 'Number]';
41
+ var booleanTag = tagPrefix + 'Boolean]';
42
+ var stringTag = tagPrefix + 'String]';
43
+ var dateTag = tagPrefix + 'Date]';
44
+ var regExpTag = tagPrefix + 'RegExp]';
45
+ var symbolTag = tagPrefix + 'Symbol]';
46
+ var errorTag = tagPrefix + 'Error]';
47
+ var arrayBufferTag = tagPrefix + 'ArrayBuffer]';
48
+ var argumentsTag = tagPrefix + 'Arguments]';
49
+ var arrayTag = tagPrefix + 'Array]';
50
+ var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return tagPrefix + item + ']'; });
51
+ var weakSetTag = tagPrefix + 'WeakSet]';
52
+ var blobTag = tagPrefix + 'Blob]';
53
+ var fileTag = tagPrefix + 'File]';
54
+ var domExceptionTag = tagPrefix + 'DOMException]';
55
+ var objectTag = tagPrefix + 'Object]';
56
+ var dataViewTag = tagPrefix + 'DataView]';
57
+ var mapTag = tagPrefix + 'Map]';
58
+ var promiseTag = tagPrefix + 'Promise]';
59
+ var setTag = tagPrefix + 'Set]';
60
+ var weakMapTag = tagPrefix + 'WeakMap]';
61
+ var windowTag = tagPrefix + 'Window]';
61
62
 
62
63
  function isArray(value) {
63
64
  return Array.isArray(value);
@@ -606,7 +607,7 @@
606
607
  return value == null || value !== value ? defaultValue : value;
607
608
  };
608
609
 
609
- var VERSION = "1.15.0";
610
+ var VERSION = "1.17.0";
610
611
  var isBrowser = typeof window !== stringUndefined && isObjectLike(window) && typeof document !== stringUndefined && isObjectLike(document) && window.document === document;
611
612
  var supportedArgumentsType = getTag((function () { return arguments; })()) === argumentsTag;
612
613
  var FUNC_ERROR_TEXT = 'Expected a function';
@@ -783,6 +784,49 @@
783
784
  }, wait);
784
785
  }
785
786
 
787
+ function argsEqual(newArgs, lastArgs) {
788
+ if (newArgs.length !== lastArgs.length) {
789
+ return false;
790
+ }
791
+ for (var i = 0, len = newArgs.length; i < len; i++) {
792
+ if (!eq(newArgs[i], lastArgs[i])) {
793
+ return false;
794
+ }
795
+ }
796
+ return true;
797
+ }
798
+ function memoize(func, options) {
799
+ var opts = options || {};
800
+ var max = mathCeil(opts.max || 0);
801
+ var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual : argsEqual;
802
+ var cache = [];
803
+ function memoized() {
804
+ var _this = this;
805
+ var newArgs = [];
806
+ for (var _i = 0; _i < arguments.length; _i++) {
807
+ newArgs[_i] = arguments[_i];
808
+ }
809
+ var cacheValue = cache.find(function (item) { return item.lastThis === _this && isEqual(item.lastArgs, newArgs); });
810
+ if (cacheValue) {
811
+ return cacheValue.lastReturn;
812
+ }
813
+ var lastReturn = func.apply(this, newArgs);
814
+ if (max > 0 && cache.length >= max) {
815
+ cache.shift();
816
+ }
817
+ cache.push({
818
+ lastArgs: newArgs,
819
+ lastThis: this,
820
+ lastReturn: lastReturn
821
+ });
822
+ return lastReturn;
823
+ }
824
+ memoized.clear = function () {
825
+ cache.length = 0;
826
+ };
827
+ return memoized;
828
+ }
829
+
786
830
  function negate(predicate) {
787
831
  var _this = this;
788
832
  if (typeof predicate !== 'function') {
@@ -1562,6 +1606,99 @@
1562
1606
  return key;
1563
1607
  };
1564
1608
 
1609
+ function isIndex(value) {
1610
+ var type = typeof value;
1611
+ if (type === 'string' && value) {
1612
+ value = toNumber(value);
1613
+ }
1614
+ return isLength(value);
1615
+ }
1616
+
1617
+ var reEscapeChar = /\\(\\)?/g;
1618
+ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
1619
+ function stringToPath(value) {
1620
+ var result = [];
1621
+ if (value.charCodeAt(0) === 46) {
1622
+ result.push('');
1623
+ }
1624
+ value.replace(rePropName, function (match, number, quote, subString) {
1625
+ result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);
1626
+ return match;
1627
+ });
1628
+ return result;
1629
+ }
1630
+
1631
+ function toKey(value) {
1632
+ return isSymbol(value) ? value : toString(value);
1633
+ }
1634
+ function toPath(value, object) {
1635
+ if (isArray(value)) {
1636
+ return value.map(toKey);
1637
+ }
1638
+ if (isSymbol(value) || (typeof value === 'string' && isObject(object) && value in object)) {
1639
+ return [value];
1640
+ }
1641
+ return stringToPath(toString(value));
1642
+ }
1643
+
1644
+ function set(object, path, value, customizer) {
1645
+ if (!isObject(object)) {
1646
+ return object;
1647
+ }
1648
+ var paths = toPath(path, object);
1649
+ var length = paths.length;
1650
+ var lastIndex = length - 1;
1651
+ var index = -1;
1652
+ var nested = object;
1653
+ while (++index < length) {
1654
+ var key = paths[index];
1655
+ if (index === lastIndex) {
1656
+ nested[key] = value;
1657
+ }
1658
+ else {
1659
+ var objValue = nested[key];
1660
+ var newValue = customizer ? customizer(objValue, key, nested) : nativeUndefined;
1661
+ if (!isObject(newValue)) {
1662
+ newValue = isObject(objValue) ? objValue : isIndex(paths[index + 1]) ? [] : {};
1663
+ }
1664
+ nested[key] = newValue;
1665
+ nested = nested[key];
1666
+ }
1667
+ }
1668
+ return object;
1669
+ }
1670
+
1671
+ function fromPathPairs(value, customizer) {
1672
+ var valueIsArray = isArray(value);
1673
+ var firstPairPath = valueIsArray && isArray(value[0]) && isArray(value[0][0]) ? value[0][0] : [];
1674
+ var firstNode = customizer ? customizer(nativeUndefined, firstPairPath[0], nativeUndefined) : nativeUndefined;
1675
+ var result = isObject(firstNode) ? firstNode : isIndex(firstPairPath[0]) ? [] : {};
1676
+ var length = valueIsArray ? value.length : 0;
1677
+ var index = -1;
1678
+ while (++index < length) {
1679
+ var pathPair = value[index];
1680
+ if (isArray(pathPair)) {
1681
+ var _a = __read(pathPair, 2), paths = _a[0], val = _a[1];
1682
+ set(result, paths, val, customizer);
1683
+ }
1684
+ }
1685
+ return result;
1686
+ }
1687
+
1688
+ function baseGet(object, key) {
1689
+ var paths = toPath(key, object);
1690
+ var length = paths.length;
1691
+ var index = 0;
1692
+ while (!isNil(object) && index < length) {
1693
+ object = object[paths[index++]];
1694
+ }
1695
+ return index && index === length ? object : nativeUndefined;
1696
+ }
1697
+ function get(object, key, defaultValue) {
1698
+ var result = isNil(object) ? nativeUndefined : baseGet(object, key);
1699
+ return isUndefined(result) ? defaultValue : result;
1700
+ }
1701
+
1565
1702
  function invert(object, predicate) {
1566
1703
  if (predicate === void 0) { predicate = stubTrue; }
1567
1704
  var _keys = allKeys(object);
@@ -1639,7 +1776,7 @@
1639
1776
  if (getKeys === void 0) { getKeys = allKeys; }
1640
1777
  return baseMerge(object, source, getKeys, customizer);
1641
1778
  }
1642
- merge.NOT_MERGE_ARRAYS = function (objValue, srcValue) { return (isArray(srcValue) ? srcValue : undefined); };
1779
+ merge.NOT_MERGE_ARRAYS = function (objValue, srcValue) { return (isArray(srcValue) ? srcValue : nativeUndefined); };
1643
1780
 
1644
1781
  var mergeObject = function (object, source) {
1645
1782
  var args = [];
@@ -1706,6 +1843,35 @@
1706
1843
  return result;
1707
1844
  }
1708
1845
 
1846
+ function basePathPairs(object, parentPath) {
1847
+ if (parentPath === void 0) { parentPath = []; }
1848
+ var result = [];
1849
+ if (isObjectLike(object)) {
1850
+ forEach(object, function (v, k) {
1851
+ var currentPath = parentPath.concat([k]);
1852
+ if (isObjectLike(v)) {
1853
+ result.push.apply(result, __spreadArray([], __read(basePathPairs(v, currentPath)), false));
1854
+ }
1855
+ else {
1856
+ result.push([currentPath, v]);
1857
+ }
1858
+ });
1859
+ }
1860
+ return result;
1861
+ }
1862
+ function pathPairs(object) {
1863
+ return basePathPairs(object);
1864
+ }
1865
+
1866
+ function unset(object, path) {
1867
+ if (isNil(object)) {
1868
+ return true;
1869
+ }
1870
+ var paths = toPath(path, object);
1871
+ var parent = paths.length < 2 ? object : get(object, paths.slice(0, -1));
1872
+ return isNil(parent) ? true : delete parent[nth(paths, -1)];
1873
+ }
1874
+
1709
1875
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
1710
1876
  function words(string, pattern) {
1711
1877
  if (pattern === void 0) { pattern = reAsciiWord; }
@@ -1847,7 +2013,7 @@
1847
2013
  if (shouldGuard && !shouldGuard(err)) {
1848
2014
  throw err;
1849
2015
  }
1850
- return undefined;
2016
+ return nativeUndefined;
1851
2017
  };
1852
2018
  try {
1853
2019
  var result = fn();
@@ -2042,6 +2208,8 @@
2042
2208
  exports.forEach = forEach;
2043
2209
  exports.forEachRight = forEachRight;
2044
2210
  exports.fromPairs = fromPairs;
2211
+ exports.fromPathPairs = fromPathPairs;
2212
+ exports.get = get;
2045
2213
  exports.groupBy = groupBy;
2046
2214
  exports.gt = gt;
2047
2215
  exports.gte = gte;
@@ -2102,6 +2270,7 @@
2102
2270
  exports.lte = lte;
2103
2271
  exports.map = map;
2104
2272
  exports.max = max;
2273
+ exports.memoize = memoize;
2105
2274
  exports.merge = merge;
2106
2275
  exports.mergeObject = mergeObject;
2107
2276
  exports.min = min;
@@ -2117,6 +2286,7 @@
2117
2286
  exports.partial = partial;
2118
2287
  exports.partition = partition;
2119
2288
  exports.pascalCase = pascalCase;
2289
+ exports.pathPairs = pathPairs;
2120
2290
  exports.pick = pick;
2121
2291
  exports.pickBy = pickBy;
2122
2292
  exports.random = random;
@@ -2127,6 +2297,7 @@
2127
2297
  exports.retry = retry;
2128
2298
  exports.root = root;
2129
2299
  exports.round = round;
2300
+ exports.set = set;
2130
2301
  exports.shuffle = shuffle;
2131
2302
  exports.sleep = sleep;
2132
2303
  exports.snakeCase = snakeCase;
@@ -2137,6 +2308,7 @@
2137
2308
  exports.toInteger = toInteger;
2138
2309
  exports.toLength = toLength;
2139
2310
  exports.toNumber = toNumber;
2311
+ exports.toPath = toPath;
2140
2312
  exports.toSafeInteger = toSafeInteger;
2141
2313
  exports.toString = toString;
2142
2314
  exports.tryit = tryit;
@@ -2144,6 +2316,7 @@
2144
2316
  exports.union = union;
2145
2317
  exports.uniq = uniq;
2146
2318
  exports.uniqueId = uniqueId;
2319
+ exports.unset = unset;
2147
2320
  exports.unzip = unzip;
2148
2321
  exports.upperCase = upperCase;
2149
2322
  exports.upperFirst = upperFirst;