ut2 1.17.0 → 1.18.1
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 +131 -107
- 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 +1 -1
- package/es/limit.js +21 -0
- package/es/memoize.js +2 -13
- package/lib/equalArrayLike.js +21 -0
- package/lib/index.js +4 -0
- package/lib/internals/helpers.js +1 -1
- package/lib/limit.js +23 -0
- package/lib/memoize.js +2 -13
- package/package.json +1 -1
- package/types/equalArrayLike.d.ts +37 -0
- package/types/index.d.ts +2 -0
- package/types/limit.d.ts +28 -0
- package/types/memoize.d.ts +1 -1
- 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 limit } from './limit.js';
|
|
33
34
|
export { default as memoize } from './memoize.js';
|
|
34
35
|
export { default as negate } from './negate.js';
|
|
35
36
|
export { default as once } from './once.js';
|
|
@@ -120,6 +121,7 @@ export { default as conformsTo } from './conformsTo.js';
|
|
|
120
121
|
export { default as constant } from './constant.js';
|
|
121
122
|
export { default as defaultTo } from './defaultTo.js';
|
|
122
123
|
export { default as eq } from './eq.js';
|
|
124
|
+
export { default as equalArrayLike } from './equalArrayLike.js';
|
|
123
125
|
export { default as gt } from './gt.js';
|
|
124
126
|
export { default as gte } from './gte.js';
|
|
125
127
|
export { default as guard } from './guard.js';
|
package/es/internals/helpers.js
CHANGED
|
@@ -2,7 +2,7 @@ import isObjectLike from '../isObjectLike.js';
|
|
|
2
2
|
import getTag from './getTag.js';
|
|
3
3
|
import { argumentsTag, functionProtoToString, stringUndefined } from './native.js';
|
|
4
4
|
|
|
5
|
-
var VERSION = "1.
|
|
5
|
+
var VERSION = "1.18.1";
|
|
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';
|
package/es/limit.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __spreadArray, __read } from 'tslib';
|
|
2
|
+
|
|
3
|
+
function limit(fn, timespan) {
|
|
4
|
+
var pending = false;
|
|
5
|
+
function limited() {
|
|
6
|
+
var args = [];
|
|
7
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
8
|
+
args[_i] = arguments[_i];
|
|
9
|
+
}
|
|
10
|
+
if (pending)
|
|
11
|
+
return;
|
|
12
|
+
pending = true;
|
|
13
|
+
fn.apply(void 0, __spreadArray([], __read(args), false));
|
|
14
|
+
setTimeout(function () {
|
|
15
|
+
pending = false;
|
|
16
|
+
}, timespan);
|
|
17
|
+
}
|
|
18
|
+
return limited;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { limit as default };
|
package/es/memoize.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import equalArrayLike from './equalArrayLike.js';
|
|
2
2
|
import { mathCeil } from './internals/native.js';
|
|
3
3
|
|
|
4
|
-
function argsEqual(newArgs, lastArgs) {
|
|
5
|
-
if (newArgs.length !== lastArgs.length) {
|
|
6
|
-
return false;
|
|
7
|
-
}
|
|
8
|
-
for (var i = 0, len = newArgs.length; i < len; i++) {
|
|
9
|
-
if (!eq(newArgs[i], lastArgs[i])) {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
4
|
function memoize(func, options) {
|
|
16
5
|
var opts = options || {};
|
|
17
6
|
var max = mathCeil(opts.max || 0);
|
|
18
|
-
var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual :
|
|
7
|
+
var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual : equalArrayLike;
|
|
19
8
|
var cache = [];
|
|
20
9
|
function memoized() {
|
|
21
10
|
var _this = this;
|
|
@@ -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 limit = require('./limit.js');
|
|
35
36
|
var memoize = require('./memoize.js');
|
|
36
37
|
var negate = require('./negate.js');
|
|
37
38
|
var once = require('./once.js');
|
|
@@ -122,6 +123,7 @@ var conformsTo = require('./conformsTo.js');
|
|
|
122
123
|
var constant = require('./constant.js');
|
|
123
124
|
var defaultTo = require('./defaultTo.js');
|
|
124
125
|
var eq = require('./eq.js');
|
|
126
|
+
var equalArrayLike = require('./equalArrayLike.js');
|
|
125
127
|
var gt = require('./gt.js');
|
|
126
128
|
var gte = require('./gte.js');
|
|
127
129
|
var guard = require('./guard.js');
|
|
@@ -182,6 +184,7 @@ exports.before = before;
|
|
|
182
184
|
exports.curry = curry;
|
|
183
185
|
exports.debounce = debounce;
|
|
184
186
|
exports.delay = delay;
|
|
187
|
+
exports.limit = limit;
|
|
185
188
|
exports.memoize = memoize;
|
|
186
189
|
exports.negate = negate;
|
|
187
190
|
exports.once = once;
|
|
@@ -272,6 +275,7 @@ exports.conformsTo = conformsTo;
|
|
|
272
275
|
exports.constant = constant;
|
|
273
276
|
exports.defaultTo = defaultTo;
|
|
274
277
|
exports.eq = eq;
|
|
278
|
+
exports.equalArrayLike = equalArrayLike;
|
|
275
279
|
exports.gt = gt;
|
|
276
280
|
exports.gte = gte;
|
|
277
281
|
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.1";
|
|
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/limit.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tslib = require('tslib');
|
|
4
|
+
|
|
5
|
+
function limit(fn, timespan) {
|
|
6
|
+
var pending = false;
|
|
7
|
+
function limited() {
|
|
8
|
+
var args = [];
|
|
9
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
10
|
+
args[_i] = arguments[_i];
|
|
11
|
+
}
|
|
12
|
+
if (pending)
|
|
13
|
+
return;
|
|
14
|
+
pending = true;
|
|
15
|
+
fn.apply(void 0, tslib.__spreadArray([], tslib.__read(args), false));
|
|
16
|
+
setTimeout(function () {
|
|
17
|
+
pending = false;
|
|
18
|
+
}, timespan);
|
|
19
|
+
}
|
|
20
|
+
return limited;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = limit;
|
package/lib/memoize.js
CHANGED
|
@@ -1,23 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var equalArrayLike = require('./equalArrayLike.js');
|
|
4
4
|
var native = require('./internals/native.js');
|
|
5
5
|
|
|
6
|
-
function argsEqual(newArgs, lastArgs) {
|
|
7
|
-
if (newArgs.length !== lastArgs.length) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
for (var i = 0, len = newArgs.length; i < len; i++) {
|
|
11
|
-
if (!eq(newArgs[i], lastArgs[i])) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
6
|
function memoize(func, options) {
|
|
18
7
|
var opts = options || {};
|
|
19
8
|
var max = native.mathCeil(opts.max || 0);
|
|
20
|
-
var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual :
|
|
9
|
+
var isEqual = typeof opts.isEqual === 'function' ? opts.isEqual : equalArrayLike;
|
|
21
10
|
var cache = [];
|
|
22
11
|
function memoized() {
|
|
23
12
|
var _this = this;
|
package/package.json
CHANGED
|
@@ -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 limit } from './limit';
|
|
51
52
|
export { default as memoize } from './memoize';
|
|
52
53
|
export { default as negate } from './negate';
|
|
53
54
|
export { default as once } from './once';
|
|
@@ -174,6 +175,7 @@ export { default as conformsTo } from './conformsTo';
|
|
|
174
175
|
export { default as constant } from './constant';
|
|
175
176
|
export { default as defaultTo } from './defaultTo';
|
|
176
177
|
export { default as eq } from './eq';
|
|
178
|
+
export { default as equalArrayLike } from './equalArrayLike';
|
|
177
179
|
export { default as gt } from './gt';
|
|
178
180
|
export { default as gte } from './gte';
|
|
179
181
|
export { default as guard } from './guard';
|
package/types/limit.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FunctionAny } from './internals/types';
|
|
2
|
+
/**
|
|
3
|
+
* 创建一个限流函数,该函数在时间间隔内只会执行一次。
|
|
4
|
+
*
|
|
5
|
+
* 与 `throttle` 的区别:
|
|
6
|
+
* 1. 在时间间隔内再次调用,`limit`不会执行,而`throttle` 会执行;
|
|
7
|
+
* 2. `limit` 没有取消和立即执行的方法,逻辑更简洁。
|
|
8
|
+
*
|
|
9
|
+
* @alias module:Function.limit
|
|
10
|
+
* @since 1.19.0
|
|
11
|
+
* @param {Function} fn 要限流的函数。
|
|
12
|
+
* @param {number} timespan 限流的时间间隔,单位为毫秒。
|
|
13
|
+
* @returns 限流函数。
|
|
14
|
+
* @example
|
|
15
|
+
* function revalidate(){
|
|
16
|
+
* if(document.visibilityState !== 'hidden' || navigator.onLine){
|
|
17
|
+
* // do something
|
|
18
|
+
* console.log('revalidate');
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* // 限制 5s 内只会执行一次
|
|
23
|
+
* const limited = limit(revalidate, 5000);
|
|
24
|
+
*
|
|
25
|
+
* window.addEventListener('visibilitychange', limited);
|
|
26
|
+
* window.addEventListener('focus', limited);
|
|
27
|
+
*/
|
|
28
|
+
export default function limit<T extends FunctionAny>(fn: T, timespan: number): (...args: Parameters<T>) => void;
|
package/types/memoize.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ type EqualFn<TFunc extends (...args: any[]) => any> = (newArgs: Parameters<TFunc
|
|
|
10
10
|
* @since 1.17.0
|
|
11
11
|
* @param {Function} func 要缓存结果的函数。
|
|
12
12
|
* @param {Object} [options] 配置项。
|
|
13
|
-
* @param {Function} [options.isEqual]
|
|
13
|
+
* @param {Function} [options.isEqual] 自定义比较参数方法。默认函数 `equalArrayLike`。
|
|
14
14
|
* @param {number} [options.max] 最大缓存数量,`0`表示不限制。默认`0`。
|
|
15
15
|
* @returns 缓存 `func` 结果的函数。
|
|
16
16
|
* @example
|
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
|
*
|