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.
@@ -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';
@@ -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.17.0";
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 eq from './eq.js';
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 : argsEqual;
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;
@@ -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.17.0";
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 eq = require('./eq.js');
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 : argsEqual;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ut2",
3
- "version": "1.17.0",
3
+ "version": "1.18.1",
4
4
  "author": "caijf",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -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';
@@ -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;
@@ -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
@@ -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
  *