ut2 1.16.0 → 1.18.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 +2 -0
- package/dist/ut2.js +74 -24
- package/dist/ut2.js.map +1 -1
- package/dist/ut2.min.js +1 -1
- package/dist/ut2.min.js.map +1 -1
- package/es/equalArrayLike.js +19 -0
- package/es/index.js +2 -0
- package/es/internals/helpers.js +2 -2
- package/es/internals/isEqualDeep.js +1 -1
- package/es/internals/native.js +24 -23
- package/es/memoize.js +36 -0
- package/lib/equalArrayLike.js +21 -0
- package/lib/index.js +4 -0
- package/lib/internals/helpers.js +1 -1
- package/lib/internals/native.js +24 -23
- package/lib/memoize.js +38 -0
- package/package.json +24 -25
- package/types/equalArrayLike.d.ts +37 -0
- package/types/index.d.ts +2 -0
- package/types/internals/native.d.ts +22 -22
- package/types/memoize.d.ts +50 -0
- package/types/uniqueId.d.ts +5 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import eq from './eq.js';
|
|
2
|
+
import isArrayLike from './isArrayLike.js';
|
|
3
|
+
|
|
4
|
+
function equalArrayLike(arg1, arg2, strictCheck) {
|
|
5
|
+
if (strictCheck === void 0) { strictCheck = true; }
|
|
6
|
+
if (eq(arg1, arg2, strictCheck))
|
|
7
|
+
return true;
|
|
8
|
+
if (!isArrayLike(arg1) || !isArrayLike(arg2))
|
|
9
|
+
return false;
|
|
10
|
+
if (arg1.length !== arg2.length)
|
|
11
|
+
return false;
|
|
12
|
+
for (var i = 0; i < arg1.length; i++) {
|
|
13
|
+
if (!eq(arg1[i], arg2[i], strictCheck))
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { equalArrayLike as default };
|
package/es/index.js
CHANGED
|
@@ -30,6 +30,7 @@ export { default as before } from './before.js';
|
|
|
30
30
|
export { default as curry } from './curry.js';
|
|
31
31
|
export { default as debounce } from './debounce.js';
|
|
32
32
|
export { default as delay } from './delay.js';
|
|
33
|
+
export { default as memoize } from './memoize.js';
|
|
33
34
|
export { default as negate } from './negate.js';
|
|
34
35
|
export { default as once } from './once.js';
|
|
35
36
|
export { default as partial } from './partial.js';
|
|
@@ -119,6 +120,7 @@ export { default as conformsTo } from './conformsTo.js';
|
|
|
119
120
|
export { default as constant } from './constant.js';
|
|
120
121
|
export { default as defaultTo } from './defaultTo.js';
|
|
121
122
|
export { default as eq } from './eq.js';
|
|
123
|
+
export { default as equalArrayLike } from './equalArrayLike.js';
|
|
122
124
|
export { default as gt } from './gt.js';
|
|
123
125
|
export { default as gte } from './gte.js';
|
|
124
126
|
export { default as guard } from './guard.js';
|
package/es/internals/helpers.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import isObjectLike from '../isObjectLike.js';
|
|
2
2
|
import getTag from './getTag.js';
|
|
3
|
-
import { argumentsTag,
|
|
3
|
+
import { argumentsTag, functionProtoToString, stringUndefined } from './native.js';
|
|
4
4
|
|
|
5
|
-
var VERSION = "1.
|
|
5
|
+
var VERSION = "1.18.0";
|
|
6
6
|
var isBrowser = typeof window !== stringUndefined && isObjectLike(window) && typeof document !== stringUndefined && isObjectLike(document) && window.document === document;
|
|
7
7
|
var supportedArgumentsType = getTag((function () { return arguments; })()) === argumentsTag;
|
|
8
8
|
var FUNC_ERROR_TEXT = 'Expected a function';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import allKeys from '../allKeys.js';
|
|
2
2
|
import eq from '../eq.js';
|
|
3
3
|
import getTagWithBugfix from './getTagWithBugfix.js';
|
|
4
|
-
import { symbolProto, nativeUndefined, arrayBufferTag, dataViewTag, errorTag, symbolTag, regExpTag, stringTag, dateTag, booleanTag, numberTag, objectTag, objectProtoHasOwnProperty, argumentsTag, setTag, mapTag,
|
|
4
|
+
import { symbolProto, nativeUndefined, arrayBufferTag, dataViewTag, errorTag, symbolTag, regExpTag, stringTag, dateTag, booleanTag, numberTag, objectTag, objectProtoHasOwnProperty, arrayTag, argumentsTag, setTag, mapTag, arrayProtoSlice } from './native.js';
|
|
5
5
|
import isBuffer from '../isBuffer.js';
|
|
6
6
|
import isFunction from '../isFunction.js';
|
|
7
7
|
import isNil from '../isNil.js';
|
package/es/internals/native.js
CHANGED
|
@@ -29,28 +29,29 @@ var selfExisted = typeof self === stringObject && self;
|
|
|
29
29
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
30
30
|
var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
|
|
31
31
|
var MAX_ARRAY_LENGTH = 4294967295;
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
var
|
|
47
|
-
var
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
53
|
-
var
|
|
54
|
-
var
|
|
32
|
+
var tagPrefix = '[object ';
|
|
33
|
+
var bigIntTag = tagPrefix + 'BigInt]';
|
|
34
|
+
var numberTag = tagPrefix + 'Number]';
|
|
35
|
+
var booleanTag = tagPrefix + 'Boolean]';
|
|
36
|
+
var stringTag = tagPrefix + 'String]';
|
|
37
|
+
var dateTag = tagPrefix + 'Date]';
|
|
38
|
+
var regExpTag = tagPrefix + 'RegExp]';
|
|
39
|
+
var symbolTag = tagPrefix + 'Symbol]';
|
|
40
|
+
var errorTag = tagPrefix + 'Error]';
|
|
41
|
+
var arrayBufferTag = tagPrefix + 'ArrayBuffer]';
|
|
42
|
+
var argumentsTag = tagPrefix + 'Arguments]';
|
|
43
|
+
var arrayTag = tagPrefix + 'Array]';
|
|
44
|
+
var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return tagPrefix + item + ']'; });
|
|
45
|
+
var weakSetTag = tagPrefix + 'WeakSet]';
|
|
46
|
+
var blobTag = tagPrefix + 'Blob]';
|
|
47
|
+
var fileTag = tagPrefix + 'File]';
|
|
48
|
+
var domExceptionTag = tagPrefix + 'DOMException]';
|
|
49
|
+
var objectTag = tagPrefix + 'Object]';
|
|
50
|
+
var dataViewTag = tagPrefix + 'DataView]';
|
|
51
|
+
var mapTag = tagPrefix + 'Map]';
|
|
52
|
+
var promiseTag = tagPrefix + 'Promise]';
|
|
53
|
+
var setTag = tagPrefix + 'Set]';
|
|
54
|
+
var weakMapTag = tagPrefix + 'WeakMap]';
|
|
55
|
+
var windowTag = tagPrefix + 'Window]';
|
|
55
56
|
|
|
56
57
|
export { MAX_ARRAY_LENGTH, MAX_SAFE_INTEGER, MIN_SAFE_INTEGER, argumentsTag, arrayBufferTag, arrayProto, arrayProtoSlice, arrayTag, bigIntTag, blobTag, booleanTag, dataViewTag, dateTag, domExceptionTag, errorTag, fileTag, functionProto, functionProtoToString, functionTags, globalExisted, globalThisExisted, mapTag, mathAbs, mathCeil, mathFloor, mathMax, mathMin, mathRandom, nativeUndefined, numberIsFinite, numberIsInteger, numberIsSafeInteger, numberTag, objectGetOwnPropertySymbols, objectGetPrototypeOf, objectKeys, objectProto, objectProtoHasOwnProperty, objectProtoPropertyIsEnumerable, objectProtoToString, objectTag, promiseTag, regExpTag, selfExisted, setTag, stringObject, stringTag, stringUndefined, symbolProto, symbolTag, weakMapTag, weakSetTag, windowTag };
|
package/es/memoize.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import equalArrayLike from './equalArrayLike.js';
|
|
2
|
+
import { mathCeil } from './internals/native.js';
|
|
3
|
+
|
|
4
|
+
function memoize(func, options) {
|
|
5
|
+
var opts = options || {};
|
|
6
|
+
var max = mathCeil(opts.max || 0);
|
|
7
|
+
var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual : equalArrayLike;
|
|
8
|
+
var cache = [];
|
|
9
|
+
function memoized() {
|
|
10
|
+
var _this = this;
|
|
11
|
+
var newArgs = [];
|
|
12
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
13
|
+
newArgs[_i] = arguments[_i];
|
|
14
|
+
}
|
|
15
|
+
var cacheValue = cache.find(function (item) { return item.lastThis === _this && isEqual(item.lastArgs, newArgs); });
|
|
16
|
+
if (cacheValue) {
|
|
17
|
+
return cacheValue.lastReturn;
|
|
18
|
+
}
|
|
19
|
+
var lastReturn = func.apply(this, newArgs);
|
|
20
|
+
if (max > 0 && cache.length >= max) {
|
|
21
|
+
cache.shift();
|
|
22
|
+
}
|
|
23
|
+
cache.push({
|
|
24
|
+
lastArgs: newArgs,
|
|
25
|
+
lastThis: this,
|
|
26
|
+
lastReturn: lastReturn
|
|
27
|
+
});
|
|
28
|
+
return lastReturn;
|
|
29
|
+
}
|
|
30
|
+
memoized.clear = function () {
|
|
31
|
+
cache.length = 0;
|
|
32
|
+
};
|
|
33
|
+
return memoized;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { memoize as default };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var eq = require('./eq.js');
|
|
4
|
+
var isArrayLike = require('./isArrayLike.js');
|
|
5
|
+
|
|
6
|
+
function equalArrayLike(arg1, arg2, strictCheck) {
|
|
7
|
+
if (strictCheck === void 0) { strictCheck = true; }
|
|
8
|
+
if (eq(arg1, arg2, strictCheck))
|
|
9
|
+
return true;
|
|
10
|
+
if (!isArrayLike(arg1) || !isArrayLike(arg2))
|
|
11
|
+
return false;
|
|
12
|
+
if (arg1.length !== arg2.length)
|
|
13
|
+
return false;
|
|
14
|
+
for (var i = 0; i < arg1.length; i++) {
|
|
15
|
+
if (!eq(arg1[i], arg2[i], strictCheck))
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
module.exports = equalArrayLike;
|
package/lib/index.js
CHANGED
|
@@ -32,6 +32,7 @@ var before = require('./before.js');
|
|
|
32
32
|
var curry = require('./curry.js');
|
|
33
33
|
var debounce = require('./debounce.js');
|
|
34
34
|
var delay = require('./delay.js');
|
|
35
|
+
var memoize = require('./memoize.js');
|
|
35
36
|
var negate = require('./negate.js');
|
|
36
37
|
var once = require('./once.js');
|
|
37
38
|
var partial = require('./partial.js');
|
|
@@ -121,6 +122,7 @@ var conformsTo = require('./conformsTo.js');
|
|
|
121
122
|
var constant = require('./constant.js');
|
|
122
123
|
var defaultTo = require('./defaultTo.js');
|
|
123
124
|
var eq = require('./eq.js');
|
|
125
|
+
var equalArrayLike = require('./equalArrayLike.js');
|
|
124
126
|
var gt = require('./gt.js');
|
|
125
127
|
var gte = require('./gte.js');
|
|
126
128
|
var guard = require('./guard.js');
|
|
@@ -181,6 +183,7 @@ exports.before = before;
|
|
|
181
183
|
exports.curry = curry;
|
|
182
184
|
exports.debounce = debounce;
|
|
183
185
|
exports.delay = delay;
|
|
186
|
+
exports.memoize = memoize;
|
|
184
187
|
exports.negate = negate;
|
|
185
188
|
exports.once = once;
|
|
186
189
|
exports.partial = partial;
|
|
@@ -270,6 +273,7 @@ exports.conformsTo = conformsTo;
|
|
|
270
273
|
exports.constant = constant;
|
|
271
274
|
exports.defaultTo = defaultTo;
|
|
272
275
|
exports.eq = eq;
|
|
276
|
+
exports.equalArrayLike = equalArrayLike;
|
|
273
277
|
exports.gt = gt;
|
|
274
278
|
exports.gte = gte;
|
|
275
279
|
exports.guard = guard;
|
package/lib/internals/helpers.js
CHANGED
|
@@ -4,7 +4,7 @@ var isObjectLike = require('../isObjectLike.js');
|
|
|
4
4
|
var getTag = require('./getTag.js');
|
|
5
5
|
var native = require('./native.js');
|
|
6
6
|
|
|
7
|
-
var VERSION = "1.
|
|
7
|
+
var VERSION = "1.18.0";
|
|
8
8
|
var isBrowser = typeof window !== native.stringUndefined && isObjectLike(window) && typeof document !== native.stringUndefined && isObjectLike(document) && window.document === document;
|
|
9
9
|
var supportedArgumentsType = getTag((function () { return arguments; })()) === native.argumentsTag;
|
|
10
10
|
var FUNC_ERROR_TEXT = 'Expected a function';
|
package/lib/internals/native.js
CHANGED
|
@@ -31,29 +31,30 @@ var selfExisted = typeof self === stringObject && self;
|
|
|
31
31
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
32
32
|
var MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;
|
|
33
33
|
var MAX_ARRAY_LENGTH = 4294967295;
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
var
|
|
47
|
-
var
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
53
|
-
var
|
|
54
|
-
var
|
|
55
|
-
var
|
|
56
|
-
var
|
|
34
|
+
var tagPrefix = '[object ';
|
|
35
|
+
var bigIntTag = tagPrefix + 'BigInt]';
|
|
36
|
+
var numberTag = tagPrefix + 'Number]';
|
|
37
|
+
var booleanTag = tagPrefix + 'Boolean]';
|
|
38
|
+
var stringTag = tagPrefix + 'String]';
|
|
39
|
+
var dateTag = tagPrefix + 'Date]';
|
|
40
|
+
var regExpTag = tagPrefix + 'RegExp]';
|
|
41
|
+
var symbolTag = tagPrefix + 'Symbol]';
|
|
42
|
+
var errorTag = tagPrefix + 'Error]';
|
|
43
|
+
var arrayBufferTag = tagPrefix + 'ArrayBuffer]';
|
|
44
|
+
var argumentsTag = tagPrefix + 'Arguments]';
|
|
45
|
+
var arrayTag = tagPrefix + 'Array]';
|
|
46
|
+
var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return tagPrefix + item + ']'; });
|
|
47
|
+
var weakSetTag = tagPrefix + 'WeakSet]';
|
|
48
|
+
var blobTag = tagPrefix + 'Blob]';
|
|
49
|
+
var fileTag = tagPrefix + 'File]';
|
|
50
|
+
var domExceptionTag = tagPrefix + 'DOMException]';
|
|
51
|
+
var objectTag = tagPrefix + 'Object]';
|
|
52
|
+
var dataViewTag = tagPrefix + 'DataView]';
|
|
53
|
+
var mapTag = tagPrefix + 'Map]';
|
|
54
|
+
var promiseTag = tagPrefix + 'Promise]';
|
|
55
|
+
var setTag = tagPrefix + 'Set]';
|
|
56
|
+
var weakMapTag = tagPrefix + 'WeakMap]';
|
|
57
|
+
var windowTag = tagPrefix + 'Window]';
|
|
57
58
|
|
|
58
59
|
exports.MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH;
|
|
59
60
|
exports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;
|
package/lib/memoize.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var equalArrayLike = require('./equalArrayLike.js');
|
|
4
|
+
var native = require('./internals/native.js');
|
|
5
|
+
|
|
6
|
+
function memoize(func, options) {
|
|
7
|
+
var opts = options || {};
|
|
8
|
+
var max = native.mathCeil(opts.max || 0);
|
|
9
|
+
var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual : equalArrayLike;
|
|
10
|
+
var cache = [];
|
|
11
|
+
function memoized() {
|
|
12
|
+
var _this = this;
|
|
13
|
+
var newArgs = [];
|
|
14
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
15
|
+
newArgs[_i] = arguments[_i];
|
|
16
|
+
}
|
|
17
|
+
var cacheValue = cache.find(function (item) { return item.lastThis === _this && isEqual(item.lastArgs, newArgs); });
|
|
18
|
+
if (cacheValue) {
|
|
19
|
+
return cacheValue.lastReturn;
|
|
20
|
+
}
|
|
21
|
+
var lastReturn = func.apply(this, newArgs);
|
|
22
|
+
if (max > 0 && cache.length >= max) {
|
|
23
|
+
cache.shift();
|
|
24
|
+
}
|
|
25
|
+
cache.push({
|
|
26
|
+
lastArgs: newArgs,
|
|
27
|
+
lastThis: this,
|
|
28
|
+
lastReturn: lastReturn
|
|
29
|
+
});
|
|
30
|
+
return lastReturn;
|
|
31
|
+
}
|
|
32
|
+
memoized.clear = function () {
|
|
33
|
+
cache.length = 0;
|
|
34
|
+
};
|
|
35
|
+
return memoized;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = memoize;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ut2",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"author": "caijf",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -59,41 +59,40 @@
|
|
|
59
59
|
"registry": "https://registry.npmjs.org/"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@commitlint/cli": "^19.
|
|
63
|
-
"@commitlint/config-conventional": "^19.
|
|
64
|
-
"@commitlint/cz-commitlint": "^19.
|
|
65
|
-
"@rollup/plugin-commonjs": "^
|
|
66
|
-
"@rollup/plugin-node-resolve": "^
|
|
67
|
-
"@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",
|
|
68
68
|
"@rollup/plugin-terser": "^0.4.4",
|
|
69
|
-
"@rollup/plugin-typescript": "^
|
|
70
|
-
"@types/jest": "^29.5.
|
|
71
|
-
"@types/node": "^20.
|
|
72
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
73
|
-
"@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",
|
|
74
74
|
"benchmark": "^2.1.4",
|
|
75
|
-
"commitizen": "^4.3.
|
|
75
|
+
"commitizen": "^4.3.1",
|
|
76
76
|
"cross-env": "^7.0.3",
|
|
77
|
-
"dayjs": "^1.11.
|
|
77
|
+
"dayjs": "^1.11.13",
|
|
78
78
|
"docdash": "^2.0.2",
|
|
79
|
-
"eslint": "^8.57.
|
|
80
|
-
"husky": "^9.
|
|
81
|
-
"inquirer": "^9.3.2",
|
|
79
|
+
"eslint": "^8.57.1",
|
|
80
|
+
"husky": "^9.1.7",
|
|
82
81
|
"jest": "^29.7.0",
|
|
83
82
|
"jest-environment-jsdom": "^29.7.0",
|
|
84
|
-
"jsdoc": "^4.0.
|
|
85
|
-
"lint-staged": "^15.
|
|
83
|
+
"jsdoc": "^4.0.4",
|
|
84
|
+
"lint-staged": "^15.5.0",
|
|
86
85
|
"lodash": "^4.17.21",
|
|
87
|
-
"prettier": "^3.3
|
|
88
|
-
"rollup": "^4.
|
|
89
|
-
"ts-jest": "^29.
|
|
90
|
-
"typescript": "^5.
|
|
91
|
-
"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"
|
|
92
91
|
},
|
|
93
92
|
"engines": {
|
|
94
93
|
"node": ">=10"
|
|
95
94
|
},
|
|
96
95
|
"dependencies": {
|
|
97
|
-
"tslib": "^2.8.
|
|
96
|
+
"tslib": "^2.8.1"
|
|
98
97
|
}
|
|
99
98
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 比较两个类数组的值是否相等。常用于参数对象比较。
|
|
3
|
+
*
|
|
4
|
+
* 1. 如果两个值相等,返回 `true`。
|
|
5
|
+
* 2. 如果两个类数组 `length` 相等,且遍历每个值都相等,则返回 `true`。
|
|
6
|
+
* 3. 否则返回 `false`。
|
|
7
|
+
*
|
|
8
|
+
* @alias module:Util.equalArrayLike
|
|
9
|
+
* @since 1.18.0
|
|
10
|
+
* @param {Array} arg1 类数组1。
|
|
11
|
+
* @param {Array} arg2 类数组2。
|
|
12
|
+
* @param {boolean} [strictCheck=true] 严格比较,如果为 `true` 表示区分 `0` 和 `-0`。默认 `true`。
|
|
13
|
+
* @returns 是否相等。
|
|
14
|
+
* @example
|
|
15
|
+
* equalArrayLike([1, 2], [1, 2]); // true
|
|
16
|
+
* equalArrayLike([1, 2], [1, 3]); // false
|
|
17
|
+
* equalArrayLike([1, 2], [1, 2, 3]); // false
|
|
18
|
+
*
|
|
19
|
+
* // 松散比较
|
|
20
|
+
* equalArrayLike(['a', 'b'], 'ab'); // true
|
|
21
|
+
* equalArrayLike(['a', 'b'], { 0: 'a', 1: 'b', length: 2 }); // true
|
|
22
|
+
*
|
|
23
|
+
* // 两个相等值返回 true
|
|
24
|
+
* equalArrayLike(NaN, NaN); // true
|
|
25
|
+
* equalArrayLike(null, null); // true
|
|
26
|
+
* equalArrayLike(undefined, undefined); // true
|
|
27
|
+
* const obj1 = {};
|
|
28
|
+
* const obj2 = obj1;
|
|
29
|
+
* equalArrayLike(obj1, obj2); // true
|
|
30
|
+
*
|
|
31
|
+
* // 0 和 -0 严格比较返回 false
|
|
32
|
+
* equalArrayLike([0, -0], [-0, 0]); // false
|
|
33
|
+
* // 非严格比较返回 true
|
|
34
|
+
* equalArrayLike([0, -0], [-0, 0], false); // true
|
|
35
|
+
*/
|
|
36
|
+
declare function equalArrayLike(arg1: ArrayLike<any>, arg2: ArrayLike<any>, strictCheck?: boolean): boolean;
|
|
37
|
+
export default equalArrayLike;
|
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';
|
|
@@ -173,6 +174,7 @@ export { default as conformsTo } from './conformsTo';
|
|
|
173
174
|
export { default as constant } from './constant';
|
|
174
175
|
export { default as defaultTo } from './defaultTo';
|
|
175
176
|
export { default as eq } from './eq';
|
|
177
|
+
export { default as equalArrayLike } from './equalArrayLike';
|
|
176
178
|
export { default as gt } from './gt';
|
|
177
179
|
export { default as gte } from './gte';
|
|
178
180
|
export { default as guard } from './guard';
|
|
@@ -46,26 +46,26 @@ export declare const MIN_SAFE_INTEGER: number;
|
|
|
46
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;
|
|
@@ -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] 自定义比较参数方法。默认函数 `equalArrayLike`。
|
|
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/uniqueId.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 生成唯一ID。如果提供了 `prefix`,会被添加到ID前缀上。
|
|
3
3
|
*
|
|
4
|
+
* 前缀+自增计数器组合。
|
|
5
|
+
*
|
|
6
|
+
* 适用于客户端,比如 `DOM id`。不建议在服务端使用自增计数器,可能会溢出。
|
|
7
|
+
*
|
|
4
8
|
* @alias module:Util.uniqueId
|
|
5
9
|
* @since 1.0.0
|
|
6
10
|
* @param {string} [prefix] 要添加到ID前缀的值。默认 `"_" + 2个随机生成的字符`。
|
|
@@ -9,7 +13,7 @@
|
|
|
9
13
|
*
|
|
10
14
|
* uniqueId(); // '_vn1'
|
|
11
15
|
*
|
|
12
|
-
* uniqueId(); // '
|
|
16
|
+
* uniqueId(); // '_xa2'
|
|
13
17
|
*
|
|
14
18
|
* uniqueId('abc_'); // 'abc_3'
|
|
15
19
|
*
|