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.
- package/README.md +8 -0
- package/dist/ut2.js +199 -26
- package/dist/ut2.js.map +1 -1
- package/dist/ut2.min.js +1 -1
- package/dist/ut2.min.js.map +1 -1
- package/es/fromPathPairs.js +25 -0
- package/es/get.js +20 -0
- package/es/guard.js +2 -1
- package/es/index.js +7 -0
- package/es/internals/helpers.js +2 -2
- package/es/internals/isEqualDeep.js +1 -1
- package/es/internals/isIndex.js +12 -0
- package/es/internals/native.js +24 -23
- package/es/internals/stringToPath.js +15 -0
- package/es/memoize.js +47 -0
- package/es/merge.js +1 -1
- package/es/pathPairs.js +25 -0
- package/es/set.js +33 -0
- package/es/toPath.js +20 -0
- package/es/unset.js +15 -0
- package/lib/fromPathPairs.js +27 -0
- package/lib/get.js +22 -0
- package/lib/guard.js +2 -1
- package/lib/index.js +14 -0
- package/lib/internals/helpers.js +1 -1
- package/lib/internals/isIndex.js +14 -0
- package/lib/internals/native.js +24 -23
- package/lib/internals/stringToPath.js +17 -0
- package/lib/memoize.js +49 -0
- package/lib/merge.js +1 -1
- package/lib/pathPairs.js +27 -0
- package/lib/set.js +35 -0
- package/lib/toPath.js +22 -0
- package/lib/unset.js +17 -0
- package/package.json +26 -29
- package/types/camelCase.d.ts +1 -1
- package/types/ceil.d.ts +1 -1
- package/types/compact.d.ts +1 -1
- package/types/eq.d.ts +1 -1
- package/types/escape.d.ts +1 -1
- package/types/escapeRegExp.d.ts +1 -1
- package/types/floor.d.ts +1 -1
- package/types/fromPathPairs.d.ts +42 -0
- package/types/get.d.ts +21 -0
- package/types/index.d.ts +7 -0
- package/types/internals/isIndex.d.ts +17 -0
- package/types/internals/native.d.ts +25 -25
- package/types/internals/root.d.ts +1 -1
- package/types/internals/stringToPath.d.ts +9 -0
- package/types/internals/types.d.ts +1 -0
- package/types/invert.d.ts +1 -1
- package/types/isBlob.d.ts +2 -2
- package/types/isFile.d.ts +1 -1
- package/types/isLength.d.ts +1 -1
- package/types/isObject.d.ts +1 -1
- package/types/isTypedArray.d.ts +1 -1
- package/types/kebabCase.d.ts +1 -1
- package/types/memoize.d.ts +50 -0
- package/types/merge.d.ts +1 -1
- package/types/mergeObject.d.ts +1 -1
- package/types/move.d.ts +1 -1
- package/types/omitBy.d.ts +1 -1
- package/types/orderBy.d.ts +1 -1
- package/types/partition.d.ts +2 -2
- package/types/pascalCase.d.ts +1 -1
- package/types/pathPairs.d.ts +30 -0
- package/types/pickBy.d.ts +1 -1
- package/types/round.d.ts +1 -1
- package/types/set.d.ts +24 -0
- package/types/snakeCase.d.ts +1 -1
- package/types/toLength.d.ts +1 -1
- package/types/toPath.d.ts +17 -0
- package/types/unset.d.ts +20 -0
- package/types/words.d.ts +1 -1
package/lib/pathPairs.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tslib = require('tslib');
|
|
4
|
+
var forEach = require('./forEach.js');
|
|
5
|
+
var isObjectLike = require('./isObjectLike.js');
|
|
6
|
+
|
|
7
|
+
function basePathPairs(object, parentPath) {
|
|
8
|
+
if (parentPath === void 0) { parentPath = []; }
|
|
9
|
+
var result = [];
|
|
10
|
+
if (isObjectLike(object)) {
|
|
11
|
+
forEach(object, function (v, k) {
|
|
12
|
+
var currentPath = parentPath.concat([k]);
|
|
13
|
+
if (isObjectLike(v)) {
|
|
14
|
+
result.push.apply(result, tslib.__spreadArray([], tslib.__read(basePathPairs(v, currentPath)), false));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
result.push([currentPath, v]);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
function pathPairs(object) {
|
|
24
|
+
return basePathPairs(object);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = pathPairs;
|
package/lib/set.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var isIndex = require('./internals/isIndex.js');
|
|
4
|
+
var native = require('./internals/native.js');
|
|
5
|
+
var isObject = require('./isObject.js');
|
|
6
|
+
var toPath = require('./toPath.js');
|
|
7
|
+
|
|
8
|
+
function set(object, path, value, customizer) {
|
|
9
|
+
if (!isObject(object)) {
|
|
10
|
+
return object;
|
|
11
|
+
}
|
|
12
|
+
var paths = toPath(path, object);
|
|
13
|
+
var length = paths.length;
|
|
14
|
+
var lastIndex = length - 1;
|
|
15
|
+
var index = -1;
|
|
16
|
+
var nested = object;
|
|
17
|
+
while (++index < length) {
|
|
18
|
+
var key = paths[index];
|
|
19
|
+
if (index === lastIndex) {
|
|
20
|
+
nested[key] = value;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
var objValue = nested[key];
|
|
24
|
+
var newValue = customizer ? customizer(objValue, key, nested) : native.nativeUndefined;
|
|
25
|
+
if (!isObject(newValue)) {
|
|
26
|
+
newValue = isObject(objValue) ? objValue : isIndex(paths[index + 1]) ? [] : {};
|
|
27
|
+
}
|
|
28
|
+
nested[key] = newValue;
|
|
29
|
+
nested = nested[key];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return object;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = set;
|
package/lib/toPath.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var stringToPath = require('./internals/stringToPath.js');
|
|
4
|
+
var isArray = require('./isArray.js');
|
|
5
|
+
var isObject = require('./isObject.js');
|
|
6
|
+
var isSymbol = require('./isSymbol.js');
|
|
7
|
+
var toString = require('./toString.js');
|
|
8
|
+
|
|
9
|
+
function toKey(value) {
|
|
10
|
+
return isSymbol(value) ? value : toString(value);
|
|
11
|
+
}
|
|
12
|
+
function toPath(value, object) {
|
|
13
|
+
if (isArray(value)) {
|
|
14
|
+
return value.map(toKey);
|
|
15
|
+
}
|
|
16
|
+
if (isSymbol(value) || (typeof value === 'string' && isObject(object) && value in object)) {
|
|
17
|
+
return [value];
|
|
18
|
+
}
|
|
19
|
+
return stringToPath(toString(value));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
module.exports = toPath;
|
package/lib/unset.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var get = require('./get.js');
|
|
4
|
+
var isNil = require('./isNil.js');
|
|
5
|
+
var nth = require('./nth.js');
|
|
6
|
+
var toPath = require('./toPath.js');
|
|
7
|
+
|
|
8
|
+
function unset(object, path) {
|
|
9
|
+
if (isNil(object)) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
var paths = toPath(path, object);
|
|
13
|
+
var parent = paths.length < 2 ? object : get(object, paths.slice(0, -1));
|
|
14
|
+
return isNil(parent) ? true : delete parent[nth(paths, -1)];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = unset;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ut2",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"author": "caijf",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -13,16 +13,14 @@
|
|
|
13
13
|
"test:coverage": "jest --coverage",
|
|
14
14
|
"test:coverage:local": "cross-env COVERAGE_LOCAL=1 jest --coverage --detectOpenHandles && open ./coverage/lcov-report/index.html",
|
|
15
15
|
"benchmark": "node benchmark/node.js",
|
|
16
|
-
"build": "
|
|
17
|
-
"build:module": "rm -rf es && rm -rf lib && rollup -c rollup.module.config.mjs",
|
|
18
|
-
"build:umd": "rm -rf dist && rollup -c rollup.umd.config.mjs",
|
|
16
|
+
"build": "rm -rf es lib dist && rollup -c && npm run build:types",
|
|
19
17
|
"build:types": "rm -rf types && tsc -p tsconfig.build.json -d --outDir types --emitDeclarationOnly",
|
|
20
18
|
"build:doc": "npm run doc",
|
|
21
19
|
"doc": "rm -rf docs && rm -rf docs-src && tsc -p tsconfig.build.json -t esnext --outDir docs-src && jsdoc -c conf.json && rm -rf docs-src",
|
|
22
20
|
"doc:open": "open ./docs/index.html",
|
|
23
21
|
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
|
|
24
22
|
"lint:fix": "npm run lint:js -- --fix",
|
|
25
|
-
"prettier": "prettier
|
|
23
|
+
"prettier": "prettier -w **/*",
|
|
26
24
|
"commit": "cz",
|
|
27
25
|
"prepublishOnly": "npm test && npm run build",
|
|
28
26
|
"tsc": "tsc --noEmit",
|
|
@@ -61,41 +59,40 @@
|
|
|
61
59
|
"registry": "https://registry.npmjs.org/"
|
|
62
60
|
},
|
|
63
61
|
"devDependencies": {
|
|
64
|
-
"@commitlint/cli": "^19.
|
|
65
|
-
"@commitlint/config-conventional": "^19.
|
|
66
|
-
"@commitlint/cz-commitlint": "^19.
|
|
67
|
-
"@rollup/plugin-commonjs": "^
|
|
68
|
-
"@rollup/plugin-node-resolve": "^
|
|
69
|
-
"@rollup/plugin-replace": "^
|
|
62
|
+
"@commitlint/cli": "^19.8.0",
|
|
63
|
+
"@commitlint/config-conventional": "^19.8.0",
|
|
64
|
+
"@commitlint/cz-commitlint": "^19.8.0",
|
|
65
|
+
"@rollup/plugin-commonjs": "^28.0.3",
|
|
66
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
67
|
+
"@rollup/plugin-replace": "^6.0.2",
|
|
70
68
|
"@rollup/plugin-terser": "^0.4.4",
|
|
71
|
-
"@rollup/plugin-typescript": "^
|
|
72
|
-
"@types/jest": "^29.5.
|
|
73
|
-
"@types/node": "^20.
|
|
74
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
75
|
-
"@typescript-eslint/parser": "^7.
|
|
69
|
+
"@rollup/plugin-typescript": "^12.1.2",
|
|
70
|
+
"@types/jest": "^29.5.14",
|
|
71
|
+
"@types/node": "^20.17.24",
|
|
72
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
73
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
76
74
|
"benchmark": "^2.1.4",
|
|
77
|
-
"commitizen": "^4.3.
|
|
75
|
+
"commitizen": "^4.3.1",
|
|
78
76
|
"cross-env": "^7.0.3",
|
|
79
|
-
"dayjs": "^1.11.
|
|
77
|
+
"dayjs": "^1.11.13",
|
|
80
78
|
"docdash": "^2.0.2",
|
|
81
|
-
"eslint": "^8.57.
|
|
82
|
-
"husky": "^9.
|
|
83
|
-
"inquirer": "^9.3.2",
|
|
79
|
+
"eslint": "^8.57.1",
|
|
80
|
+
"husky": "^9.1.7",
|
|
84
81
|
"jest": "^29.7.0",
|
|
85
82
|
"jest-environment-jsdom": "^29.7.0",
|
|
86
|
-
"jsdoc": "^4.0.
|
|
87
|
-
"lint-staged": "^15.
|
|
83
|
+
"jsdoc": "^4.0.4",
|
|
84
|
+
"lint-staged": "^15.5.0",
|
|
88
85
|
"lodash": "^4.17.21",
|
|
89
|
-
"prettier": "^3.3
|
|
90
|
-
"rollup": "^4.
|
|
91
|
-
"ts-jest": "^29.
|
|
92
|
-
"typescript": "^5.
|
|
93
|
-
"underscore": "^1.13.
|
|
86
|
+
"prettier": "^3.5.3",
|
|
87
|
+
"rollup": "^4.35.0",
|
|
88
|
+
"ts-jest": "^29.2.6",
|
|
89
|
+
"typescript": "^5.8.2",
|
|
90
|
+
"underscore": "^1.13.7"
|
|
94
91
|
},
|
|
95
92
|
"engines": {
|
|
96
93
|
"node": ">=10"
|
|
97
94
|
},
|
|
98
95
|
"dependencies": {
|
|
99
|
-
"tslib": "^2.8.
|
|
96
|
+
"tslib": "^2.8.1"
|
|
100
97
|
}
|
|
101
98
|
}
|
package/types/camelCase.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @alias module:String.camelCase
|
|
5
5
|
* @since 1.0.0
|
|
6
|
-
* @see {@link https://en.wikipedia.org/wiki/Camel_case
|
|
6
|
+
* @see {@link https://en.wikipedia.org/wiki/Camel_case Camel_case}
|
|
7
7
|
* @param {string} string 要转换的字符串。
|
|
8
8
|
* @param {RegExp | string} [pattern] 拆分词组的匹配模式。
|
|
9
9
|
* @returns {string} 驼峰写法的字符串。
|
package/types/ceil.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @alias module:Math.ceil
|
|
7
7
|
* @since 1.0.0
|
|
8
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入
|
|
8
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 小数舍入}
|
|
9
9
|
* @param {number} number 要向上舍入的值。
|
|
10
10
|
* @param {number} [precision=0] 向上舍入的精度。默认 `0`。
|
|
11
11
|
* @returns {number} 向上舍入的值。
|
package/types/compact.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @alias module:Array.compact
|
|
7
7
|
* @since 1.0.0
|
|
8
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy
|
|
8
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy Falsy}
|
|
9
9
|
* @param {Array} array 待处理的数组。
|
|
10
10
|
* @returns {Array} 过滤掉假值的新数组。
|
|
11
11
|
* @example
|
package/types/eq.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @alias module:Util.eq
|
|
7
7
|
* @since 1.0.0
|
|
8
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
|
|
8
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness JavaScript 中的相等性判断}
|
|
9
9
|
* @param {*} value 要比较的值。
|
|
10
10
|
* @param {*} other 另一个要比较的值。
|
|
11
11
|
* @param {boolean} [strictCheck=false] 严格比较,区分 `0` `-0`。默认 `false`。
|
package/types/escape.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @alias module:String.escape
|
|
11
11
|
* @since 1.0.0
|
|
12
|
-
* @see {@link https://mathiasbynens.be/notes/ambiguous-ampersands
|
|
12
|
+
* @see {@link https://mathiasbynens.be/notes/ambiguous-ampersands ambiguous-ampersands}
|
|
13
13
|
* @param {string} string 要转义的字符串。
|
|
14
14
|
* @returns {string} 转义后的字符串。
|
|
15
15
|
* @example
|
package/types/escapeRegExp.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @alias module:String.escapeRegExp
|
|
5
5
|
* @since 1.0.0
|
|
6
|
-
* @see {@link https://tc39.es/ecma262/multipage/text-processing.html#sec-patterns
|
|
6
|
+
* @see {@link https://tc39.es/ecma262/multipage/text-processing.html#sec-patterns syntax characters}
|
|
7
7
|
* @param {string} string 要转义的字符串。
|
|
8
8
|
* @returns {string} 转义后的字符串。
|
|
9
9
|
* @example
|
package/types/floor.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @alias module:Math.floor
|
|
7
7
|
* @since 1.0.0
|
|
8
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入
|
|
8
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/round#小数舍入 小数舍入}
|
|
9
9
|
* @param {number} number 要向下舍入的值。
|
|
10
10
|
* @param {number} [precision=0] 向下舍入的精度。默认 `0`。
|
|
11
11
|
* @returns {number} 向下舍入的值。
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import set from './set';
|
|
2
|
+
/**
|
|
3
|
+
* 将属性路径/值对的数组转为对象。与 [`pathPairs`](#.pathPairs) 相反。
|
|
4
|
+
*
|
|
5
|
+
* 如果属性路径为有效索引数字(数字或字符串)且没有值时,将创建数组,否则创建对象。例如:
|
|
6
|
+
*
|
|
7
|
+
* ```typescript
|
|
8
|
+
* fromPathPairs([[[0], 42], [["foo"], "baz"]]);
|
|
9
|
+
* // [42, foo: 'baz']
|
|
10
|
+
*
|
|
11
|
+
* // 调整顺序后
|
|
12
|
+
* fromPathPairs([[["foo"], "baz"], [[0], 42]]);
|
|
13
|
+
* // { foo: 'baz', '0': 42 }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @alias module:Object.fromPathPairs
|
|
17
|
+
* @since 1.16.0
|
|
18
|
+
* @param {Array} value 属性路径/值对的数组。
|
|
19
|
+
* @returns {Object | Array} 转换后的对象或数组。
|
|
20
|
+
* @param {Function} [customizer] 自定义指定值。
|
|
21
|
+
* @example
|
|
22
|
+
* fromPathPairs([
|
|
23
|
+
* [['date', 'start'], '2024-10-10'],
|
|
24
|
+
* [['date', 'end'], '2024-12-31']
|
|
25
|
+
* ]);
|
|
26
|
+
* // { date: { start: '2024-10-10', end: '2024-12-31' } }
|
|
27
|
+
*
|
|
28
|
+
* fromPathPairs([
|
|
29
|
+
* [['date', 0], '2024-10-10'],
|
|
30
|
+
* [['date', 1], '2024-12-31']
|
|
31
|
+
* ]);
|
|
32
|
+
* // { date: ['2024-10-10', '2024-12-31'] }
|
|
33
|
+
*
|
|
34
|
+
* fromPathPairs([
|
|
35
|
+
* [[0, 'date'], '2024-10-10'],
|
|
36
|
+
* [[1, 'date'], '2024-12-31']
|
|
37
|
+
* ]);
|
|
38
|
+
* // [{ date: '2024-10-10' }, { date: '2024-12-31' }]
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
declare function fromPathPairs(value: any[], customizer?: Parameters<typeof set>[3]): any;
|
|
42
|
+
export default fromPathPairs;
|
package/types/get.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Many, TPath } from './internals/types';
|
|
2
|
+
/**
|
|
3
|
+
* 获取对象路径的值。
|
|
4
|
+
*
|
|
5
|
+
* @alias module:Object.get
|
|
6
|
+
* @since 1.16.0
|
|
7
|
+
* @param {*} object 要查询的对象。
|
|
8
|
+
* @param {string | number | symbol | Array} path 属性路径字符串或数组。
|
|
9
|
+
* @param {*} [defaultValue] 替代返回 `undefined` 的默认值。
|
|
10
|
+
* @returns {*} 属性值。
|
|
11
|
+
* @example
|
|
12
|
+
* const obj = { a: [{ b: { c: 1 } }] };
|
|
13
|
+
*
|
|
14
|
+
* get(obj, 'a[0].b.c'); // 1
|
|
15
|
+
*
|
|
16
|
+
* get(obj, ['a', '0', 'b', 'c']); // 1
|
|
17
|
+
*
|
|
18
|
+
* get(obj, 'a.b.c', 'default'); // 'default'
|
|
19
|
+
*/
|
|
20
|
+
declare function get<TDefault = unknown>(object: any, key: Many<TPath>, defaultValue?: TDefault): TDefault | undefined;
|
|
21
|
+
export default get;
|
package/types/index.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export { default as before } from './before';
|
|
|
48
48
|
export { default as curry } from './curry';
|
|
49
49
|
export { default as debounce } from './debounce';
|
|
50
50
|
export { default as delay } from './delay';
|
|
51
|
+
export { default as memoize } from './memoize';
|
|
51
52
|
export { default as negate } from './negate';
|
|
52
53
|
export { default as once } from './once';
|
|
53
54
|
export { default as partial } from './partial';
|
|
@@ -128,6 +129,8 @@ export { default as randomInt } from './randomInt';
|
|
|
128
129
|
export { default as allKeys } from './allKeys';
|
|
129
130
|
export { default as allKeysIn } from './allKeysIn';
|
|
130
131
|
export { default as findKey } from './findKey';
|
|
132
|
+
export { default as fromPathPairs } from './fromPathPairs';
|
|
133
|
+
export { default as get } from './get';
|
|
131
134
|
export { default as invert } from './invert';
|
|
132
135
|
export { default as keys } from './keys';
|
|
133
136
|
export { default as keysIn } from './keysIn';
|
|
@@ -137,6 +140,9 @@ export { default as omit } from './omit';
|
|
|
137
140
|
export { default as omitBy } from './omitBy';
|
|
138
141
|
export { default as pick } from './pick';
|
|
139
142
|
export { default as pickBy } from './pickBy';
|
|
143
|
+
export { default as pathPairs } from './pathPairs';
|
|
144
|
+
export { default as set } from './set';
|
|
145
|
+
export { default as unset } from './unset';
|
|
140
146
|
/**
|
|
141
147
|
* 字符串
|
|
142
148
|
*
|
|
@@ -185,6 +191,7 @@ export { default as toFinite } from './toFinite';
|
|
|
185
191
|
export { default as toInteger } from './toInteger';
|
|
186
192
|
export { default as toLength } from './toLength';
|
|
187
193
|
export { default as toNumber } from './toNumber';
|
|
194
|
+
export { default as toPath } from './toPath';
|
|
188
195
|
export { default as toSafeInteger } from './toSafeInteger';
|
|
189
196
|
export { default as toString } from './toString';
|
|
190
197
|
export { default as tryit } from './tryit';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 检查值是否为有效的数组索引值。
|
|
3
|
+
*
|
|
4
|
+
* @private
|
|
5
|
+
* @param value 要检查的值。
|
|
6
|
+
* @returns {boolean} 值是否为有效的数组索引值。
|
|
7
|
+
* @example
|
|
8
|
+
* isIndex(0); // true
|
|
9
|
+
* isIndex('0'); // true
|
|
10
|
+
* isIndex('42'); // true
|
|
11
|
+
*
|
|
12
|
+
* isIndex('a'); // false
|
|
13
|
+
* isIndex(0.1); // false
|
|
14
|
+
* isIndex(Infinity); // false
|
|
15
|
+
*/
|
|
16
|
+
declare function isIndex(value: any): boolean;
|
|
17
|
+
export default isIndex;
|
|
@@ -31,41 +31,41 @@ export declare const selfExisted: false | (Window & typeof globalThis);
|
|
|
31
31
|
/**
|
|
32
32
|
* @summary 最大安全整数。
|
|
33
33
|
* @since 1.0.0
|
|
34
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
|
|
34
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER MAX_SAFE_INTEGER}
|
|
35
35
|
*/
|
|
36
36
|
export declare const MAX_SAFE_INTEGER: number;
|
|
37
37
|
/**
|
|
38
38
|
* @summary 最小安全整数。
|
|
39
39
|
* @since 1.0.0
|
|
40
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER
|
|
40
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER MIN_SAFE_INTEGER}
|
|
41
41
|
*/
|
|
42
42
|
export declare const MIN_SAFE_INTEGER: number;
|
|
43
43
|
/**
|
|
44
44
|
* @summary 最大数组长度 `Math.pow(2,32) - 1`。
|
|
45
45
|
* @since 1.0.0
|
|
46
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length
|
|
46
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/length length}
|
|
47
47
|
*/
|
|
48
48
|
export declare const MAX_ARRAY_LENGTH = 4294967295;
|
|
49
|
-
export declare const bigIntTag
|
|
50
|
-
export declare const numberTag
|
|
51
|
-
export declare const booleanTag
|
|
52
|
-
export declare const stringTag
|
|
53
|
-
export declare const dateTag
|
|
54
|
-
export declare const regExpTag
|
|
55
|
-
export declare const symbolTag
|
|
56
|
-
export declare const errorTag
|
|
57
|
-
export declare const arrayBufferTag
|
|
58
|
-
export declare const argumentsTag
|
|
59
|
-
export declare const arrayTag
|
|
49
|
+
export declare const bigIntTag: string;
|
|
50
|
+
export declare const numberTag: string;
|
|
51
|
+
export declare const booleanTag: string;
|
|
52
|
+
export declare const stringTag: string;
|
|
53
|
+
export declare const dateTag: string;
|
|
54
|
+
export declare const regExpTag: string;
|
|
55
|
+
export declare const symbolTag: string;
|
|
56
|
+
export declare const errorTag: string;
|
|
57
|
+
export declare const arrayBufferTag: string;
|
|
58
|
+
export declare const argumentsTag: string;
|
|
59
|
+
export declare const arrayTag: string;
|
|
60
60
|
export declare const functionTags: string[];
|
|
61
|
-
export declare const weakSetTag
|
|
62
|
-
export declare const blobTag
|
|
63
|
-
export declare const fileTag
|
|
64
|
-
export declare const domExceptionTag
|
|
65
|
-
export declare const objectTag
|
|
66
|
-
export declare const dataViewTag
|
|
67
|
-
export declare const mapTag
|
|
68
|
-
export declare const promiseTag
|
|
69
|
-
export declare const setTag
|
|
70
|
-
export declare const weakMapTag
|
|
71
|
-
export declare const windowTag
|
|
61
|
+
export declare const weakSetTag: string;
|
|
62
|
+
export declare const blobTag: string;
|
|
63
|
+
export declare const fileTag: string;
|
|
64
|
+
export declare const domExceptionTag: string;
|
|
65
|
+
export declare const objectTag: string;
|
|
66
|
+
export declare const dataViewTag: string;
|
|
67
|
+
export declare const mapTag: string;
|
|
68
|
+
export declare const promiseTag: string;
|
|
69
|
+
export declare const setTag: string;
|
|
70
|
+
export declare const weakMapTag: string;
|
|
71
|
+
export declare const windowTag: string;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 3. Web Workers 中等同于 `self`
|
|
8
8
|
*
|
|
9
9
|
* @since 1.10.0
|
|
10
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/globalThis
|
|
10
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/globalThis globalThis}
|
|
11
11
|
*/
|
|
12
12
|
declare const root: typeof globalThis;
|
|
13
13
|
export default root;
|
|
@@ -3,6 +3,7 @@ export type SyncFn<P extends any[], R> = (...args: P) => R;
|
|
|
3
3
|
export type AsyncFn<P extends any[], R> = (...args: P) => Promise<R>;
|
|
4
4
|
export type SingleSyncFn<R> = () => R;
|
|
5
5
|
export type SingleAsyncFn<R> = () => Promise<R>;
|
|
6
|
+
export type TPath = string | symbol | number;
|
|
6
7
|
/**
|
|
7
8
|
* 工具辅助类型
|
|
8
9
|
*/
|
package/types/invert.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { ObjectPredicate, PropertyName, WithNullable } from './internals/types';
|
|
|
4
4
|
*
|
|
5
5
|
* @alias module:Object.invert
|
|
6
6
|
* @since 1.8.0
|
|
7
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy
|
|
7
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy Truthy}
|
|
8
8
|
* @param {Object} object 来源对象。
|
|
9
9
|
* @param {Function} [predicate] 调用每一个属性的函数,返回 `Truthy` 表示要反转,否则不反转。
|
|
10
10
|
* @returns {Object} 新对象。
|
package/types/isBlob.d.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @alias module:Language.isBlob
|
|
7
7
|
* @since 1.0.0
|
|
8
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/Blob
|
|
9
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File
|
|
8
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/Blob Blob}
|
|
9
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File File}
|
|
10
10
|
* @param {*} value 要检查的值。
|
|
11
11
|
* @returns {boolean} 如果值为 `Blob` 对象,返回 `true`,否则返回 `false`。
|
|
12
12
|
* @example
|
package/types/isFile.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @alias module:Language.isFile
|
|
7
7
|
* @since 1.11.0
|
|
8
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File
|
|
8
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/File File}
|
|
9
9
|
* @param {*} value 要检查的值。
|
|
10
10
|
* @returns {boolean} 如果值为 `File` 对象,返回 `true`,否则返回 `false`。
|
|
11
11
|
* @example
|
package/types/isLength.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @alias module:Language.isLength
|
|
5
5
|
* @since 1.0.0
|
|
6
|
-
* @see {@link https://tc39.es/ecma262/#sec-tolength
|
|
6
|
+
* @see {@link https://tc39.es/ecma262/#sec-tolength ToLength}
|
|
7
7
|
* @param {*} value 要检查的值。
|
|
8
8
|
* @returns {boolean} 如果值为有效的类数组长度,返回 `true`,否则返回 `false`。
|
|
9
9
|
* @example
|
package/types/isObject.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { FunctionAny } from './internals/types';
|
|
|
4
4
|
*
|
|
5
5
|
* @alias module:Language.isObject
|
|
6
6
|
* @since 1.0.0
|
|
7
|
-
* @see {@link https://tc39.es/ecma262/#sec-ecmascript-language-types
|
|
7
|
+
* @see {@link https://tc39.es/ecma262/#sec-ecmascript-language-types language type}
|
|
8
8
|
* @param {*} value 要检查的值。
|
|
9
9
|
* @returns {boolean} 如果值为对象,返回 `true`,否则返回 `false`。
|
|
10
10
|
* @example
|
package/types/isTypedArray.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @alias module:Language.isTypedArray
|
|
5
5
|
* @since 1.0.0
|
|
6
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Typed_arrays
|
|
6
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Typed_arrays Typed_arrays}
|
|
7
7
|
* @param {*} value 要检查的值。
|
|
8
8
|
* @returns {boolean} 如果值为类型化数组,返回 `true`,否则返回 `false`。
|
|
9
9
|
* @example
|
package/types/kebabCase.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @alias module:String.kebabCase
|
|
5
5
|
* @since 1.0.0
|
|
6
|
-
* @see {@link https://en.wikipedia.org/wiki/Letter_case#Special_case_styles
|
|
6
|
+
* @see {@link https://en.wikipedia.org/wiki/Letter_case#Special_case_styles kebab case}
|
|
7
7
|
* @param {string} string 要转换的字符串。
|
|
8
8
|
* @param {RegExp | string} [pattern] 拆分词组的匹配模式。
|
|
9
9
|
* @returns {string} 转换后的字符串。
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
type EqualFn<TFunc extends (...args: any[]) => any> = (newArgs: Parameters<TFunc>, lastArgs: Parameters<TFunc>) => boolean;
|
|
2
|
+
/**
|
|
3
|
+
* 创建一个缓存 `func` 结果的函数。
|
|
4
|
+
*
|
|
5
|
+
* 如果上下文和参数一致,直接返回缓存结果,否则执行函数并缓存。
|
|
6
|
+
*
|
|
7
|
+
* 返回的函数含有一个 `clear` 方法,用于清除缓存。
|
|
8
|
+
*
|
|
9
|
+
* @alias module:Function.memoize
|
|
10
|
+
* @since 1.17.0
|
|
11
|
+
* @param {Function} func 要缓存结果的函数。
|
|
12
|
+
* @param {Object} [options] 配置项。
|
|
13
|
+
* @param {Function} [options.isEqual] 自定义比较参数方法。默认函数遍历参数并使用 `===` 进行比较。
|
|
14
|
+
* @param {number} [options.max] 最大缓存数量,`0`表示不限制。默认`0`。
|
|
15
|
+
* @returns 缓存 `func` 结果的函数。
|
|
16
|
+
* @example
|
|
17
|
+
* const memoizedValues = memoize(Object.values);
|
|
18
|
+
* const object = { a: 1, b: 2 };
|
|
19
|
+
* const other = { a: 3, b: 4 };
|
|
20
|
+
*
|
|
21
|
+
* memoizedValues(object); // [1, 2]
|
|
22
|
+
* memoizedValues(other); // [3, 4]
|
|
23
|
+
*
|
|
24
|
+
* object.a = 2;
|
|
25
|
+
* memoizedValues(object); // [1, 2]
|
|
26
|
+
*
|
|
27
|
+
* // 清空缓存
|
|
28
|
+
* memoizedValues.clear();
|
|
29
|
+
*
|
|
30
|
+
* memoizedValues(object); // [2, 2]
|
|
31
|
+
*
|
|
32
|
+
* // 限制缓存数量。如限制缓存数量为1时,效果同 memoize-one 。
|
|
33
|
+
* const memoizedOneValues = memoize(Object.values, { max: 1 });
|
|
34
|
+
*
|
|
35
|
+
* // 自定义比较函数。如深比较。
|
|
36
|
+
* import { isEqual } from 'ut2'
|
|
37
|
+
* const deepMemoizedValues = memoize(Object.values, { isEqual });
|
|
38
|
+
* const result1 = deepMemoizedValues({ a: 1 });
|
|
39
|
+
* const result2 = deepMemoizedValues({ a: 1 });
|
|
40
|
+
* console.log(result1 === result2); // true
|
|
41
|
+
*
|
|
42
|
+
*/
|
|
43
|
+
declare function memoize<TFunc extends (...args: any[]) => any>(func: TFunc, options?: {
|
|
44
|
+
isEqual?: EqualFn<TFunc>;
|
|
45
|
+
max?: number;
|
|
46
|
+
}): {
|
|
47
|
+
(this: any, ...newArgs: Parameters<TFunc>): any;
|
|
48
|
+
clear(): void;
|
|
49
|
+
};
|
|
50
|
+
export default memoize;
|
package/types/merge.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ type Customizer = (objValue: any, srcValue: any, key: string | symbol, object: a
|
|
|
7
7
|
*
|
|
8
8
|
* 如果不需要合并数组,第三个参数传入 `merge.NOT_MERGE_ARRAYS` 。
|
|
9
9
|
*
|
|
10
|
-
* 如果需要合并继承的属性,第四个参数传入 {@link https://caijf.github.io/ut2/module-Object.html#.
|
|
10
|
+
* 如果需要合并继承的属性,第四个参数传入 {@link https://caijf.github.io/ut2/module-Object.html#.allKeys allKeys} 方法, `merge(object, source, undefined, allKeys)`。
|
|
11
11
|
*
|
|
12
12
|
* @alias module:Object.merge
|
|
13
13
|
* @since 1.0.0
|
package/types/mergeObject.d.ts
CHANGED
package/types/move.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @alias module:Array.move
|
|
5
5
|
* @since 1.10.0
|
|
6
|
-
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
|
|
6
|
+
* @see {@link https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/splice splice}
|
|
7
7
|
* @param {Array} array 要处理的数组。
|
|
8
8
|
* @param {number} from 要移动的元素索引。
|
|
9
9
|
* @param {number} to 要移动目标位置的元素索引。
|