@x-oasis/batchinate-last 0.1.8
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 +19 -0
- package/dist/batchinate-last.cjs.development.js +87 -0
- package/dist/batchinate-last.cjs.development.js.map +1 -0
- package/dist/batchinate-last.cjs.production.min.js +2 -0
- package/dist/batchinate-last.cjs.production.min.js.map +1 -0
- package/dist/batchinate-last.esm.js +83 -0
- package/dist/batchinate-last.esm.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +8 -0
- package/package.json +19 -0
- package/src/index.ts +86 -0
- package/test/test.spec.ts +5 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.json +7 -0
- package/vitest.config.ts +26 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @x-oasis/batchinate-last
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
$ npm i @x-oasis/batchinate-last
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## How to use
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import Batchinator from '@x-oasis/batchinate-last'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## How to run test
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
$ pnpm test
|
|
19
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var BatchinateLast = /*#__PURE__*/function () {
|
|
6
|
+
function BatchinateLast(cb, delayMS) {
|
|
7
|
+
this._callback = cb;
|
|
8
|
+
this._delayMS = delayMS;
|
|
9
|
+
this._taskHandler = null;
|
|
10
|
+
this._args = null;
|
|
11
|
+
this.handler = this.handler.bind(this);
|
|
12
|
+
}
|
|
13
|
+
var _proto = BatchinateLast.prototype;
|
|
14
|
+
_proto.dispose = function dispose(options) {
|
|
15
|
+
if (options === void 0) {
|
|
16
|
+
options = {
|
|
17
|
+
abort: false
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
var _options = options,
|
|
21
|
+
abort = _options.abort;
|
|
22
|
+
if (this._taskHandler) {
|
|
23
|
+
this._taskHandler.cancel();
|
|
24
|
+
this._taskHandler = null;
|
|
25
|
+
}
|
|
26
|
+
if (typeof this._callback === 'function' && !abort) {
|
|
27
|
+
this._callback.apply(this, this._args);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
_proto.inSchedule = function inSchedule() {
|
|
31
|
+
return !!this._taskHandler;
|
|
32
|
+
};
|
|
33
|
+
_proto.flush = function flush() {
|
|
34
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
35
|
+
args[_key] = arguments[_key];
|
|
36
|
+
}
|
|
37
|
+
if (args.length) this._args = args;
|
|
38
|
+
};
|
|
39
|
+
_proto.handler = function handler() {
|
|
40
|
+
var _this = this;
|
|
41
|
+
if (this._taskHandler) {
|
|
42
|
+
this._taskHandler.cancel();
|
|
43
|
+
this._taskHandler = null;
|
|
44
|
+
}
|
|
45
|
+
this._callback.apply(this, this._args);
|
|
46
|
+
if (this._delayMS && this._clockTime !== this._lastTime) {
|
|
47
|
+
var elapsedTime = Date.now() - this._lastTime;
|
|
48
|
+
var timeoutTime = Math.max(this._delayMS - elapsedTime, 0);
|
|
49
|
+
this._clockTime = Date.now();
|
|
50
|
+
var timeoutHandler = setTimeout(function () {
|
|
51
|
+
_this.handler();
|
|
52
|
+
}, timeoutTime);
|
|
53
|
+
this._taskHandler = {
|
|
54
|
+
cancel: function cancel() {
|
|
55
|
+
return clearTimeout(timeoutHandler);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
_proto.schedule = function schedule() {
|
|
61
|
+
var _this2 = this;
|
|
62
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
63
|
+
args[_key2] = arguments[_key2];
|
|
64
|
+
}
|
|
65
|
+
this._args = args;
|
|
66
|
+
var now = Date.now();
|
|
67
|
+
this._lastTime = now;
|
|
68
|
+
if (this._taskHandler) return;
|
|
69
|
+
if (!this._delayMS) {
|
|
70
|
+
this.handler();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this._clockTime = now;
|
|
74
|
+
var timeoutHandler = setTimeout(function () {
|
|
75
|
+
_this2.handler();
|
|
76
|
+
}, this._delayMS);
|
|
77
|
+
this._taskHandler = {
|
|
78
|
+
cancel: function cancel() {
|
|
79
|
+
return clearTimeout(timeoutHandler);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
return BatchinateLast;
|
|
84
|
+
}();
|
|
85
|
+
|
|
86
|
+
exports.default = BatchinateLast;
|
|
87
|
+
//# sourceMappingURL=batchinate-last.cjs.development.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchinate-last.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["class BatchinateLast {\n readonly _delayMS: number;\n private _args: Array<any>;\n\n private _callback: Function;\n\n private _clockTime: number;\n private _lastTime: number;\n private _taskHandler: {\n cancel: () => void;\n };\n\n constructor(cb: Function, delayMS: number) {\n this._callback = cb;\n this._delayMS = delayMS;\n this._taskHandler = null;\n this._args = null;\n this.handler = this.handler.bind(this);\n }\n\n dispose(\n options: {\n abort: boolean;\n } = {\n abort: false,\n }\n ) {\n const { abort } = options;\n if (this._taskHandler) {\n this._taskHandler.cancel();\n this._taskHandler = null;\n }\n if (typeof this._callback === 'function' && !abort) {\n this._callback.apply(this, this._args); // eslint-disable-line\n }\n }\n\n inSchedule() {\n return !!this._taskHandler;\n }\n\n flush(...args) {\n if (args.length) this._args = args;\n }\n\n handler() {\n if (this._taskHandler) {\n this._taskHandler.cancel();\n this._taskHandler = null;\n }\n this._callback.apply(this, this._args); // eslint-disable-line\n\n if (this._delayMS && this._clockTime !== this._lastTime) {\n const elapsedTime = Date.now() - this._lastTime;\n const timeoutTime = Math.max(this._delayMS - elapsedTime, 0);\n this._clockTime = Date.now();\n const timeoutHandler = setTimeout(() => {\n this.handler();\n }, timeoutTime);\n\n this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };\n }\n }\n\n schedule(...args) {\n this._args = args;\n const now = Date.now();\n this._lastTime = now;\n\n if (this._taskHandler) return;\n\n if (!this._delayMS) {\n this.handler();\n return;\n }\n\n this._clockTime = now;\n const timeoutHandler = setTimeout(() => {\n this.handler();\n }, this._delayMS);\n\n this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };\n }\n}\n\nexport default BatchinateLast;\n"],"names":["BatchinateLast","cb","delayMS","_callback","_delayMS","_taskHandler","_args","handler","bind","_proto","prototype","dispose","options","abort","_options","cancel","apply","inSchedule","flush","args","Array","_len","_key","arguments","length","_clockTime","_lastTime","elapsedTime","Date","now","timeoutTime","Math","max","timeoutHandler","setTimeout","_this","clearTimeout","schedule","_len2","_key2","_this2"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function(){function t(t,a){this._callback=t,this._delayMS=a,this._taskHandler=null,this._args=null,this.handler=this.handler.bind(this)}var a=t.prototype;return a.dispose=function(t){void 0===t&&(t={abort:!1});var a=t.abort;this._taskHandler&&(this._taskHandler.cancel(),this._taskHandler=null),"function"!=typeof this._callback||a||this._callback.apply(this,this._args)},a.inSchedule=function(){return!!this._taskHandler},a.flush=function(){for(var t=arguments.length,a=new Array(t),e=0;e<t;e++)a[e]=arguments[e];a.length&&(this._args=a)},a.handler=function(){var t=this;if(this._taskHandler&&(this._taskHandler.cancel(),this._taskHandler=null),this._callback.apply(this,this._args),this._delayMS&&this._clockTime!==this._lastTime){var a=Date.now()-this._lastTime,e=Math.max(this._delayMS-a,0);this._clockTime=Date.now();var i=setTimeout((function(){t.handler()}),e);this._taskHandler={cancel:function(){return clearTimeout(i)}}}},a.schedule=function(){for(var t=this,a=arguments.length,e=new Array(a),i=0;i<a;i++)e[i]=arguments[i];this._args=e;var s=Date.now();if(this._lastTime=s,!this._taskHandler)if(this._delayMS){this._clockTime=s;var n=setTimeout((function(){t.handler()}),this._delayMS);this._taskHandler={cancel:function(){return clearTimeout(n)}}}else this.handler()},t}();
|
|
2
|
+
//# sourceMappingURL=batchinate-last.cjs.production.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchinate-last.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["class BatchinateLast {\n readonly _delayMS: number;\n private _args: Array<any>;\n\n private _callback: Function;\n\n private _clockTime: number;\n private _lastTime: number;\n private _taskHandler: {\n cancel: () => void;\n };\n\n constructor(cb: Function, delayMS: number) {\n this._callback = cb;\n this._delayMS = delayMS;\n this._taskHandler = null;\n this._args = null;\n this.handler = this.handler.bind(this);\n }\n\n dispose(\n options: {\n abort: boolean;\n } = {\n abort: false,\n }\n ) {\n const { abort } = options;\n if (this._taskHandler) {\n this._taskHandler.cancel();\n this._taskHandler = null;\n }\n if (typeof this._callback === 'function' && !abort) {\n this._callback.apply(this, this._args); // eslint-disable-line\n }\n }\n\n inSchedule() {\n return !!this._taskHandler;\n }\n\n flush(...args) {\n if (args.length) this._args = args;\n }\n\n handler() {\n if (this._taskHandler) {\n this._taskHandler.cancel();\n this._taskHandler = null;\n }\n this._callback.apply(this, this._args); // eslint-disable-line\n\n if (this._delayMS && this._clockTime !== this._lastTime) {\n const elapsedTime = Date.now() - this._lastTime;\n const timeoutTime = Math.max(this._delayMS - elapsedTime, 0);\n this._clockTime = Date.now();\n const timeoutHandler = setTimeout(() => {\n this.handler();\n }, timeoutTime);\n\n this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };\n }\n }\n\n schedule(...args) {\n this._args = args;\n const now = Date.now();\n this._lastTime = now;\n\n if (this._taskHandler) return;\n\n if (!this._delayMS) {\n this.handler();\n return;\n }\n\n this._clockTime = now;\n const timeoutHandler = setTimeout(() => {\n this.handler();\n }, this._delayMS);\n\n this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };\n }\n}\n\nexport default BatchinateLast;\n"],"names":["BatchinateLast","cb","delayMS","this","_callback","_delayMS","_taskHandler","_args","handler","bind","_proto","prototype","dispose","options","abort","cancel","apply","inSchedule","flush","args","Array","_len","_key","arguments","length","_clockTime","_lastTime","elapsedTime","Date","now","timeoutTime","Math","max","timeoutHandler","setTimeout","_this","clearTimeout","schedule","_len2","_key2","_this2"],"mappings":"+FAYE,SAAAA,EAAYC,EAAcC,GACxBC,KAAKC,UAAYH,EACjBE,KAAKE,SAAWH,EAChBC,KAAKG,aAAe,KACpBH,KAAKI,MAAQ,KACbJ,KAAKK,QAAUL,KAAKK,QAAQC,KAAKN,MAClC,IAAAO,EAAAV,EAAAW,UAgEA,OAhEAD,EAEDE,QAAA,SACEC,YAAAA,IAAAA,EAEI,CACFC,OAAO,IAGT,IAAQA,EAAUD,EAAVC,MACJX,KAAKG,eACPH,KAAKG,aAAaS,SAClBZ,KAAKG,aAAe,MAEQ,mBAAnBH,KAAKC,WAA6BU,GAC3CX,KAAKC,UAAUY,MAAMb,KAAMA,KAAKI,QAEnCG,EAEDO,WAAA,WACE,QAASd,KAAKG,cACfI,EAEDQ,MAAA,sCAASC,MAAIC,MAAAC,GAAAC,IAAAA,EAAAD,EAAAC,IAAJH,EAAIG,GAAAC,UAAAD,GACPH,EAAKK,SAAQrB,KAAKI,MAAQY,IAC/BT,EAEDF,QAAA,sBAOE,GANIL,KAAKG,eACPH,KAAKG,aAAaS,SAClBZ,KAAKG,aAAe,MAEtBH,KAAKC,UAAUY,MAAMb,KAAMA,KAAKI,OAE5BJ,KAAKE,UAAYF,KAAKsB,aAAetB,KAAKuB,UAAW,CACvD,IAAMC,EAAcC,KAAKC,MAAQ1B,KAAKuB,UAChCI,EAAcC,KAAKC,IAAI7B,KAAKE,SAAWsB,EAAa,GAC1DxB,KAAKsB,WAAaG,KAAKC,MACvB,IAAMI,EAAiBC,YAAW,WAChCC,EAAK3B,YACJsB,GAEH3B,KAAKG,aAAe,CAAES,OAAQ,WAAA,OAAMqB,aAAaH,OAEpDvB,EAED2B,SAAA,6CAAYlB,MAAIC,MAAAkB,GAAAC,IAAAA,EAAAD,EAAAC,IAAJpB,EAAIoB,GAAAhB,UAAAgB,GACdpC,KAAKI,MAAQY,EACb,IAAMU,EAAMD,KAAKC,MAGjB,GAFA1B,KAAKuB,UAAYG,GAEb1B,KAAKG,aAET,GAAKH,KAAKE,SAAV,CAKAF,KAAKsB,WAAaI,EAClB,IAAMI,EAAiBC,YAAW,WAChCM,EAAKhC,YACJL,KAAKE,UAERF,KAAKG,aAAe,CAAES,OAAQ,WAAA,OAAMqB,aAAaH,UAT/C9B,KAAKK,WAURR"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
var BatchinateLast = /*#__PURE__*/function () {
|
|
2
|
+
function BatchinateLast(cb, delayMS) {
|
|
3
|
+
this._callback = cb;
|
|
4
|
+
this._delayMS = delayMS;
|
|
5
|
+
this._taskHandler = null;
|
|
6
|
+
this._args = null;
|
|
7
|
+
this.handler = this.handler.bind(this);
|
|
8
|
+
}
|
|
9
|
+
var _proto = BatchinateLast.prototype;
|
|
10
|
+
_proto.dispose = function dispose(options) {
|
|
11
|
+
if (options === void 0) {
|
|
12
|
+
options = {
|
|
13
|
+
abort: false
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
var _options = options,
|
|
17
|
+
abort = _options.abort;
|
|
18
|
+
if (this._taskHandler) {
|
|
19
|
+
this._taskHandler.cancel();
|
|
20
|
+
this._taskHandler = null;
|
|
21
|
+
}
|
|
22
|
+
if (typeof this._callback === 'function' && !abort) {
|
|
23
|
+
this._callback.apply(this, this._args);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
_proto.inSchedule = function inSchedule() {
|
|
27
|
+
return !!this._taskHandler;
|
|
28
|
+
};
|
|
29
|
+
_proto.flush = function flush() {
|
|
30
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
31
|
+
args[_key] = arguments[_key];
|
|
32
|
+
}
|
|
33
|
+
if (args.length) this._args = args;
|
|
34
|
+
};
|
|
35
|
+
_proto.handler = function handler() {
|
|
36
|
+
var _this = this;
|
|
37
|
+
if (this._taskHandler) {
|
|
38
|
+
this._taskHandler.cancel();
|
|
39
|
+
this._taskHandler = null;
|
|
40
|
+
}
|
|
41
|
+
this._callback.apply(this, this._args);
|
|
42
|
+
if (this._delayMS && this._clockTime !== this._lastTime) {
|
|
43
|
+
var elapsedTime = Date.now() - this._lastTime;
|
|
44
|
+
var timeoutTime = Math.max(this._delayMS - elapsedTime, 0);
|
|
45
|
+
this._clockTime = Date.now();
|
|
46
|
+
var timeoutHandler = setTimeout(function () {
|
|
47
|
+
_this.handler();
|
|
48
|
+
}, timeoutTime);
|
|
49
|
+
this._taskHandler = {
|
|
50
|
+
cancel: function cancel() {
|
|
51
|
+
return clearTimeout(timeoutHandler);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
_proto.schedule = function schedule() {
|
|
57
|
+
var _this2 = this;
|
|
58
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
59
|
+
args[_key2] = arguments[_key2];
|
|
60
|
+
}
|
|
61
|
+
this._args = args;
|
|
62
|
+
var now = Date.now();
|
|
63
|
+
this._lastTime = now;
|
|
64
|
+
if (this._taskHandler) return;
|
|
65
|
+
if (!this._delayMS) {
|
|
66
|
+
this.handler();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this._clockTime = now;
|
|
70
|
+
var timeoutHandler = setTimeout(function () {
|
|
71
|
+
_this2.handler();
|
|
72
|
+
}, this._delayMS);
|
|
73
|
+
this._taskHandler = {
|
|
74
|
+
cancel: function cancel() {
|
|
75
|
+
return clearTimeout(timeoutHandler);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
return BatchinateLast;
|
|
80
|
+
}();
|
|
81
|
+
|
|
82
|
+
export default BatchinateLast;
|
|
83
|
+
//# sourceMappingURL=batchinate-last.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchinate-last.esm.js","sources":["../src/index.ts"],"sourcesContent":["class BatchinateLast {\n readonly _delayMS: number;\n private _args: Array<any>;\n\n private _callback: Function;\n\n private _clockTime: number;\n private _lastTime: number;\n private _taskHandler: {\n cancel: () => void;\n };\n\n constructor(cb: Function, delayMS: number) {\n this._callback = cb;\n this._delayMS = delayMS;\n this._taskHandler = null;\n this._args = null;\n this.handler = this.handler.bind(this);\n }\n\n dispose(\n options: {\n abort: boolean;\n } = {\n abort: false,\n }\n ) {\n const { abort } = options;\n if (this._taskHandler) {\n this._taskHandler.cancel();\n this._taskHandler = null;\n }\n if (typeof this._callback === 'function' && !abort) {\n this._callback.apply(this, this._args); // eslint-disable-line\n }\n }\n\n inSchedule() {\n return !!this._taskHandler;\n }\n\n flush(...args) {\n if (args.length) this._args = args;\n }\n\n handler() {\n if (this._taskHandler) {\n this._taskHandler.cancel();\n this._taskHandler = null;\n }\n this._callback.apply(this, this._args); // eslint-disable-line\n\n if (this._delayMS && this._clockTime !== this._lastTime) {\n const elapsedTime = Date.now() - this._lastTime;\n const timeoutTime = Math.max(this._delayMS - elapsedTime, 0);\n this._clockTime = Date.now();\n const timeoutHandler = setTimeout(() => {\n this.handler();\n }, timeoutTime);\n\n this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };\n }\n }\n\n schedule(...args) {\n this._args = args;\n const now = Date.now();\n this._lastTime = now;\n\n if (this._taskHandler) return;\n\n if (!this._delayMS) {\n this.handler();\n return;\n }\n\n this._clockTime = now;\n const timeoutHandler = setTimeout(() => {\n this.handler();\n }, this._delayMS);\n\n this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };\n }\n}\n\nexport default BatchinateLast;\n"],"names":["BatchinateLast","cb","delayMS","_callback","_delayMS","_taskHandler","_args","handler","bind","_proto","prototype","dispose","options","abort","_options","cancel","apply","inSchedule","flush","args","Array","_len","_key","arguments","length","_clockTime","_lastTime","elapsedTime","Date","now","timeoutTime","Math","max","timeoutHandler","setTimeout","_this","clearTimeout","schedule","_len2","_key2","_this2"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare class BatchinateLast {
|
|
2
|
+
readonly _delayMS: number;
|
|
3
|
+
private _args;
|
|
4
|
+
private _callback;
|
|
5
|
+
private _clockTime;
|
|
6
|
+
private _lastTime;
|
|
7
|
+
private _taskHandler;
|
|
8
|
+
constructor(cb: Function, delayMS: number);
|
|
9
|
+
dispose(options?: {
|
|
10
|
+
abort: boolean;
|
|
11
|
+
}): void;
|
|
12
|
+
inSchedule(): boolean;
|
|
13
|
+
flush(...args: any[]): void;
|
|
14
|
+
handler(): void;
|
|
15
|
+
schedule(...args: any[]): void;
|
|
16
|
+
}
|
|
17
|
+
export default BatchinateLast;
|
package/dist/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@x-oasis/batchinate-last",
|
|
3
|
+
"version": "0.1.8",
|
|
4
|
+
"description": "batchinate-last function",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"typings": "dist/index.d.ts",
|
|
7
|
+
"module": "dist/batchinate-last.esm.js",
|
|
8
|
+
"author": "",
|
|
9
|
+
"license": "ISC",
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"tsdx": "^0.14.1"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsdx build --tsconfig tsconfig.build.json",
|
|
15
|
+
"clean": "rimraf ./dist",
|
|
16
|
+
"test": "vitest",
|
|
17
|
+
"compile": "tsc -p tsconfig.build.json"
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
class BatchinateLast {
|
|
2
|
+
readonly _delayMS: number;
|
|
3
|
+
private _args: Array<any>;
|
|
4
|
+
|
|
5
|
+
private _callback: Function;
|
|
6
|
+
|
|
7
|
+
private _clockTime: number;
|
|
8
|
+
private _lastTime: number;
|
|
9
|
+
private _taskHandler: {
|
|
10
|
+
cancel: () => void;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
constructor(cb: Function, delayMS: number) {
|
|
14
|
+
this._callback = cb;
|
|
15
|
+
this._delayMS = delayMS;
|
|
16
|
+
this._taskHandler = null;
|
|
17
|
+
this._args = null;
|
|
18
|
+
this.handler = this.handler.bind(this);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
dispose(
|
|
22
|
+
options: {
|
|
23
|
+
abort: boolean;
|
|
24
|
+
} = {
|
|
25
|
+
abort: false,
|
|
26
|
+
}
|
|
27
|
+
) {
|
|
28
|
+
const { abort } = options;
|
|
29
|
+
if (this._taskHandler) {
|
|
30
|
+
this._taskHandler.cancel();
|
|
31
|
+
this._taskHandler = null;
|
|
32
|
+
}
|
|
33
|
+
if (typeof this._callback === 'function' && !abort) {
|
|
34
|
+
this._callback.apply(this, this._args); // eslint-disable-line
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
inSchedule() {
|
|
39
|
+
return !!this._taskHandler;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
flush(...args) {
|
|
43
|
+
if (args.length) this._args = args;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
handler() {
|
|
47
|
+
if (this._taskHandler) {
|
|
48
|
+
this._taskHandler.cancel();
|
|
49
|
+
this._taskHandler = null;
|
|
50
|
+
}
|
|
51
|
+
this._callback.apply(this, this._args); // eslint-disable-line
|
|
52
|
+
|
|
53
|
+
if (this._delayMS && this._clockTime !== this._lastTime) {
|
|
54
|
+
const elapsedTime = Date.now() - this._lastTime;
|
|
55
|
+
const timeoutTime = Math.max(this._delayMS - elapsedTime, 0);
|
|
56
|
+
this._clockTime = Date.now();
|
|
57
|
+
const timeoutHandler = setTimeout(() => {
|
|
58
|
+
this.handler();
|
|
59
|
+
}, timeoutTime);
|
|
60
|
+
|
|
61
|
+
this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
schedule(...args) {
|
|
66
|
+
this._args = args;
|
|
67
|
+
const now = Date.now();
|
|
68
|
+
this._lastTime = now;
|
|
69
|
+
|
|
70
|
+
if (this._taskHandler) return;
|
|
71
|
+
|
|
72
|
+
if (!this._delayMS) {
|
|
73
|
+
this.handler();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this._clockTime = now;
|
|
78
|
+
const timeoutHandler = setTimeout(() => {
|
|
79
|
+
this.handler();
|
|
80
|
+
}, this._delayMS);
|
|
81
|
+
|
|
82
|
+
this._taskHandler = { cancel: () => clearTimeout(timeoutHandler) };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export default BatchinateLast;
|
package/tsconfig.json
ADDED
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// import path from 'path';
|
|
2
|
+
// import tsPath from 'vite-tsconfig-paths';
|
|
3
|
+
import { defineConfig } from 'vitest/config';
|
|
4
|
+
|
|
5
|
+
// const __dirname = import.meta.url.slice(7, import.meta.url.lastIndexOf('/'));
|
|
6
|
+
|
|
7
|
+
export default defineConfig({
|
|
8
|
+
test: {
|
|
9
|
+
globals: true,
|
|
10
|
+
include: ['test/**/*.(spec|test).ts'],
|
|
11
|
+
exclude: ['node_modules/**'],
|
|
12
|
+
threads: false,
|
|
13
|
+
|
|
14
|
+
coverage: {
|
|
15
|
+
provider: 'istanbul', // or 'c8'
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
// plugins: [tsPath()],
|
|
20
|
+
resolve: {
|
|
21
|
+
alias: {},
|
|
22
|
+
},
|
|
23
|
+
define: {
|
|
24
|
+
__DEV__: false,
|
|
25
|
+
},
|
|
26
|
+
});
|