ut2 1.18.0 → 1.19.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/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';
@@ -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.18.0";
5
+ var VERSION = "1.19.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';
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/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');
@@ -183,6 +184,7 @@ exports.before = before;
183
184
  exports.curry = curry;
184
185
  exports.debounce = debounce;
185
186
  exports.delay = delay;
187
+ exports.limit = limit;
186
188
  exports.memoize = memoize;
187
189
  exports.negate = negate;
188
190
  exports.once = once;
@@ -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.18.0";
7
+ var VERSION = "1.19.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/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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ut2",
3
- "version": "1.18.0",
3
+ "version": "1.19.0",
4
4
  "author": "caijf",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
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';
@@ -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;