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.
@@ -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';
@@ -1,8 +1,8 @@
1
1
  import isObjectLike from '../isObjectLike.js';
2
2
  import getTag from './getTag.js';
3
- import { argumentsTag, stringUndefined, functionProtoToString } from './native.js';
3
+ import { argumentsTag, functionProtoToString, stringUndefined } from './native.js';
4
4
 
5
- var VERSION = "1.16.0";
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, arrayTag, arrayProtoSlice } from './native.js';
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';
@@ -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 bigIntTag = '[object BigInt]';
33
- var numberTag = '[object Number]';
34
- var booleanTag = '[object Boolean]';
35
- var stringTag = '[object String]';
36
- var dateTag = '[object Date]';
37
- var regExpTag = '[object RegExp]';
38
- var symbolTag = '[object Symbol]';
39
- var errorTag = '[object Error]';
40
- var arrayBufferTag = '[object ArrayBuffer]';
41
- var argumentsTag = '[object Arguments]';
42
- var arrayTag = '[object Array]';
43
- var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return '[object ' + item + ']'; });
44
- var weakSetTag = '[object WeakSet]';
45
- var blobTag = '[object Blob]';
46
- var fileTag = '[object File]';
47
- var domExceptionTag = '[object DOMException]';
48
- var objectTag = '[object Object]';
49
- var dataViewTag = '[object DataView]';
50
- var mapTag = '[object Map]';
51
- var promiseTag = '[object Promise]';
52
- var setTag = '[object Set]';
53
- var weakMapTag = '[object WeakMap]';
54
- var windowTag = '[object Window]';
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;
@@ -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.16.0";
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';
@@ -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 bigIntTag = '[object BigInt]';
35
- var numberTag = '[object Number]';
36
- var booleanTag = '[object Boolean]';
37
- var stringTag = '[object String]';
38
- var dateTag = '[object Date]';
39
- var regExpTag = '[object RegExp]';
40
- var symbolTag = '[object Symbol]';
41
- var errorTag = '[object Error]';
42
- var arrayBufferTag = '[object ArrayBuffer]';
43
- var argumentsTag = '[object Arguments]';
44
- var arrayTag = '[object Array]';
45
- var functionTags = ['Function', 'AsyncFunction', 'GeneratorFunction', 'Proxy'].map(function (item) { return '[object ' + item + ']'; });
46
- var weakSetTag = '[object WeakSet]';
47
- var blobTag = '[object Blob]';
48
- var fileTag = '[object File]';
49
- var domExceptionTag = '[object DOMException]';
50
- var objectTag = '[object Object]';
51
- var dataViewTag = '[object DataView]';
52
- var mapTag = '[object Map]';
53
- var promiseTag = '[object Promise]';
54
- var setTag = '[object Set]';
55
- var weakMapTag = '[object WeakMap]';
56
- var windowTag = '[object Window]';
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.16.0",
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.3.0",
63
- "@commitlint/config-conventional": "^19.2.2",
64
- "@commitlint/cz-commitlint": "^19.2.0",
65
- "@rollup/plugin-commonjs": "^25.0.8",
66
- "@rollup/plugin-node-resolve": "^15.2.3",
67
- "@rollup/plugin-replace": "^5.0.7",
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": "^11.1.6",
70
- "@types/jest": "^29.5.12",
71
- "@types/node": "^20.14.9",
72
- "@typescript-eslint/eslint-plugin": "^7.14.1",
73
- "@typescript-eslint/parser": "^7.14.1",
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.0",
75
+ "commitizen": "^4.3.1",
76
76
  "cross-env": "^7.0.3",
77
- "dayjs": "^1.11.11",
77
+ "dayjs": "^1.11.13",
78
78
  "docdash": "^2.0.2",
79
- "eslint": "^8.57.0",
80
- "husky": "^9.0.11",
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.3",
85
- "lint-staged": "^15.2.7",
83
+ "jsdoc": "^4.0.4",
84
+ "lint-staged": "^15.5.0",
86
85
  "lodash": "^4.17.21",
87
- "prettier": "^3.3.2",
88
- "rollup": "^4.18.0",
89
- "ts-jest": "^29.1.5",
90
- "typescript": "^5.5.2",
91
- "underscore": "^1.13.6"
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.0"
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 = "[object BigInt]";
50
- export declare const numberTag = "[object Number]";
51
- export declare const booleanTag = "[object Boolean]";
52
- export declare const stringTag = "[object String]";
53
- export declare const dateTag = "[object Date]";
54
- export declare const regExpTag = "[object RegExp]";
55
- export declare const symbolTag = "[object Symbol]";
56
- export declare const errorTag = "[object Error]";
57
- export declare const arrayBufferTag = "[object ArrayBuffer]";
58
- export declare const argumentsTag = "[object Arguments]";
59
- export declare const arrayTag = "[object Array]";
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 = "[object WeakSet]";
62
- export declare const blobTag = "[object Blob]";
63
- export declare const fileTag = "[object File]";
64
- export declare const domExceptionTag = "[object DOMException]";
65
- export declare const objectTag = "[object Object]";
66
- export declare const dataViewTag = "[object DataView]";
67
- export declare const mapTag = "[object Map]";
68
- export declare const promiseTag = "[object Promise]";
69
- export declare const setTag = "[object Set]";
70
- export declare const weakMapTag = "[object WeakMap]";
71
- export declare const windowTag = "[object Window]";
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;
@@ -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(); // '_vn2'
16
+ * uniqueId(); // '_xa2'
13
17
  *
14
18
  * uniqueId('abc_'); // 'abc_3'
15
19
  *