1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var index_1 = require("../index");
|
4 | var DebounceOperator = /** @class */ (function () {
|
5 | function DebounceOperator(dt, ins) {
|
6 | this.dt = dt;
|
7 | this.ins = ins;
|
8 | this.type = 'debounce';
|
9 | this.out = null;
|
10 | this.id = null;
|
11 | this.t = index_1.NO;
|
12 | }
|
13 | DebounceOperator.prototype._start = function (out) {
|
14 | this.out = out;
|
15 | this.ins._add(this);
|
16 | };
|
17 | DebounceOperator.prototype._stop = function () {
|
18 | this.ins._remove(this);
|
19 | this.out = null;
|
20 | this.id = null;
|
21 | };
|
22 | DebounceOperator.prototype.clearInterval = function () {
|
23 | var id = this.id;
|
24 | if (id !== null) {
|
25 | clearInterval(id);
|
26 | }
|
27 | this.id = null;
|
28 | };
|
29 | DebounceOperator.prototype._n = function (t) {
|
30 | var _this = this;
|
31 | var u = this.out;
|
32 | if (!u)
|
33 | return;
|
34 | this.clearInterval();
|
35 | this.t = t;
|
36 | this.id = setInterval(function () {
|
37 | _this.clearInterval();
|
38 | u._n(t);
|
39 | _this.t = index_1.NO;
|
40 | }, this.dt);
|
41 | };
|
42 | DebounceOperator.prototype._e = function (err) {
|
43 | var u = this.out;
|
44 | if (!u)
|
45 | return;
|
46 | this.clearInterval();
|
47 | u._e(err);
|
48 | };
|
49 | DebounceOperator.prototype._c = function () {
|
50 | var u = this.out;
|
51 | if (!u)
|
52 | return;
|
53 | this.clearInterval();
|
54 | if (this.t != index_1.NO)
|
55 | u._n(this.t);
|
56 | this.t = index_1.NO;
|
57 | u._c();
|
58 | };
|
59 | return DebounceOperator;
|
60 | }());
|
61 | /**
|
62 | * Delays events until a certain amount of silence has passed. If that timespan
|
63 | * of silence is not met the event is dropped.
|
64 | *
|
65 | * Marble diagram:
|
66 | *
|
67 | * ```text
|
68 | * --1----2--3--4----5|
|
69 | * debounce(60)
|
70 | * -----1----------4--|
|
71 | * ```
|
72 | *
|
73 | * Example:
|
74 | *
|
75 | * ```js
|
76 | * import fromDiagram from 'xstream/extra/fromDiagram'
|
77 | * import debounce from 'xstream/extra/debounce'
|
78 | *
|
79 | * const stream = fromDiagram('--1----2--3--4----5|')
|
80 | * .compose(debounce(60))
|
81 | *
|
82 | * stream.addListener({
|
83 | * next: i => console.log(i),
|
84 | * error: err => console.error(err),
|
85 | * complete: () => console.log('completed')
|
86 | * })
|
87 | * ```
|
88 | *
|
89 | * ```text
|
90 | * > 1
|
91 | * > 4
|
92 | * > completed
|
93 | * ```
|
94 | *
|
95 | * @param {number} period The amount of silence required in milliseconds.
|
96 | * @return {Stream}
|
97 | */
|
98 | function debounce(period) {
|
99 | return function debounceOperator(ins) {
|
100 | return new index_1.Stream(new DebounceOperator(period, ins));
|
101 | };
|
102 | }
|
103 | exports.default = debounce;
|
104 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvZGVib3VuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBOEM7QUFFOUM7SUFNRSwwQkFBbUIsRUFBVSxFQUNWLEdBQWM7UUFEZCxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ1YsUUFBRyxHQUFILEdBQUcsQ0FBVztRQU4xQixTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLFFBQUcsR0FBYyxJQUFXLENBQUM7UUFDNUIsT0FBRSxHQUFRLElBQUksQ0FBQztRQUNmLE1BQUMsR0FBUSxVQUFFLENBQUM7SUFJcEIsQ0FBQztJQUVELGlDQUFNLEdBQU4sVUFBTyxHQUFjO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELGdDQUFLLEdBQUw7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQVcsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNqQixDQUFDO0lBRUQsd0NBQWEsR0FBYjtRQUNFLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2YsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDakIsQ0FBQztJQUVELDZCQUFFLEdBQUYsVUFBRyxDQUFJO1FBQVAsaUJBVUM7UUFUQyxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQ3BCLEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsS0FBSSxDQUFDLENBQUMsR0FBRyxVQUFFLENBQUM7UUFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELDZCQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCw2QkFBRSxHQUFGO1FBQ0UsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQUU7WUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNULENBQUM7SUFDSCx1QkFBQztBQUFELENBQUMsQUF4REQsSUF3REM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBQ0gsU0FBd0IsUUFBUSxDQUFJLE1BQWM7SUFDaEQsT0FBTyxTQUFTLGdCQUFnQixDQUFDLEdBQWM7UUFDN0MsT0FBTyxJQUFJLGNBQU0sQ0FBSSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztBQUNKLENBQUM7QUFKRCwyQkFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3IsIFN0cmVhbSwgTk99IGZyb20gJy4uL2luZGV4JztcblxuY2xhc3MgRGVib3VuY2VPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZGVib3VuY2UnO1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD4gPSBudWxsIGFzIGFueTtcbiAgcHJpdmF0ZSBpZDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB0OiBhbnkgPSBOTztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgcHVibGljIGluczogU3RyZWFtPFQ+KSB7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IG51bGwgYXMgYW55O1xuICAgIHRoaXMuaWQgPSBudWxsO1xuICB9XG5cbiAgY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuaWQ7XG4gICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICB9XG4gICAgdGhpcy5pZCA9IG51bGw7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuICAgIHRoaXMudCA9IHQ7XG4gICAgdGhpcy5pZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuICAgICAgdS5fbih0KTtcbiAgICAgIHRoaXMudCA9IE5PO1xuICAgIH0sIHRoaXMuZHQpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgdGhpcy5jbGVhckludGVydmFsKCk7XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuICAgIGlmICh0aGlzLnQgIT0gTk8pIHUuX24odGhpcy50KTtcbiAgICB0aGlzLnQgPSBOTztcbiAgICB1Ll9jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxheXMgZXZlbnRzIHVudGlsIGEgY2VydGFpbiBhbW91bnQgb2Ygc2lsZW5jZSBoYXMgcGFzc2VkLiBJZiB0aGF0IHRpbWVzcGFuXG4gKiBvZiBzaWxlbmNlIGlzIG5vdCBtZXQgdGhlIGV2ZW50IGlzIGRyb3BwZWQuXG4gKlxuICogTWFyYmxlIGRpYWdyYW06XG4gKlxuICogYGBgdGV4dFxuICogLS0xLS0tLTItLTMtLTQtLS0tNXxcbiAqICAgICBkZWJvdW5jZSg2MClcbiAqIC0tLS0tMS0tLS0tLS0tLS00LS18XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgZnJvbURpYWdyYW0gZnJvbSAneHN0cmVhbS9leHRyYS9mcm9tRGlhZ3JhbSdcbiAqIGltcG9ydCBkZWJvdW5jZSBmcm9tICd4c3RyZWFtL2V4dHJhL2RlYm91bmNlJ1xuICpcbiAqIGNvbnN0IHN0cmVhbSA9IGZyb21EaWFncmFtKCctLTEtLS0tMi0tMy0tNC0tLS01fCcpXG4gKiAgLmNvbXBvc2UoZGVib3VuY2UoNjApKVxuICpcbiAqIHN0cmVhbS5hZGRMaXN0ZW5lcih7XG4gKiAgIG5leHQ6IGkgPT4gY29uc29sZS5sb2coaSksXG4gKiAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2NvbXBsZXRlZCcpXG4gKiB9KVxuICogYGBgXG4gKlxuICogYGBgdGV4dFxuICogPiAxXG4gKiA+IDRcbiAqID4gY29tcGxldGVkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcGVyaW9kIFRoZSBhbW91bnQgb2Ygc2lsZW5jZSByZXF1aXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlPFQ+KHBlcmlvZDogbnVtYmVyKTogKGluczogU3RyZWFtPFQ+KSA9PiBTdHJlYW08VD4ge1xuICByZXR1cm4gZnVuY3Rpb24gZGVib3VuY2VPcGVyYXRvcihpbnM6IFN0cmVhbTxUPikge1xuICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBEZWJvdW5jZU9wZXJhdG9yKHBlcmlvZCwgaW5zKSk7XG4gIH07XG59XG4iXX0= |
\ | No newline at end of file |