UNPKG

7.96 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var index_1 = require("../index");
4var 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 */
98function debounce(period) {
99 return function debounceOperator(ins) {
100 return new index_1.Stream(new DebounceOperator(period, ins));
101 };
102}
103exports.default = debounce;
104//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXh0cmEvZGVib3VuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBOEM7QUFFOUM7SUFNRSwwQkFBbUIsRUFBVSxFQUNWLEdBQWM7UUFEZCxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQ1YsUUFBRyxHQUFILEdBQUcsQ0FBVztRQU4xQixTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ2xCLFFBQUcsR0FBYyxJQUFXLENBQUM7UUFDNUIsT0FBRSxHQUFRLElBQUksQ0FBQztRQUNmLE1BQUMsR0FBUSxVQUFFLENBQUM7SUFJcEIsQ0FBQztJQUVELGlDQUFNLEdBQU4sVUFBTyxHQUFjO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELGdDQUFLLEdBQUw7UUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQVcsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNqQixDQUFDO0lBRUQsd0NBQWEsR0FBYjtRQUNFLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2YsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDakIsQ0FBQztJQUVELDZCQUFFLEdBQUYsVUFBRyxDQUFJO1FBQVAsaUJBVUM7UUFUQyxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDO1lBQ3BCLEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsS0FBSSxDQUFDLENBQUMsR0FBRyxVQUFFLENBQUM7UUFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELDZCQUFFLEdBQUYsVUFBRyxHQUFRO1FBQ1QsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCw2QkFBRSxHQUFGO1FBQ0UsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQUU7WUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNULENBQUM7SUFDSCx1QkFBQztBQUFELENBQUMsQUF4REQsSUF3REM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBQ0gsU0FBd0IsUUFBUSxDQUFJLE1BQWM7SUFDaEQsT0FBTyxTQUFTLGdCQUFnQixDQUFDLEdBQWM7UUFDN0MsT0FBTyxJQUFJLGNBQU0sQ0FBSSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQztBQUNKLENBQUM7QUFKRCwyQkFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3BlcmF0b3IsIFN0cmVhbSwgTk99IGZyb20gJy4uL2luZGV4JztcblxuY2xhc3MgRGVib3VuY2VPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIE9wZXJhdG9yPFQsIFQ+IHtcbiAgcHVibGljIHR5cGUgPSAnZGVib3VuY2UnO1xuICBwdWJsaWMgb3V0OiBTdHJlYW08VD4gPSBudWxsIGFzIGFueTtcbiAgcHJpdmF0ZSBpZDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB0OiBhbnkgPSBOTztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgcHVibGljIGluczogU3RyZWFtPFQ+KSB7XG4gIH1cblxuICBfc3RhcnQob3V0OiBTdHJlYW08VD4pOiB2b2lkIHtcbiAgICB0aGlzLm91dCA9IG91dDtcbiAgICB0aGlzLmlucy5fYWRkKHRoaXMpO1xuICB9XG5cbiAgX3N0b3AoKTogdm9pZCB7XG4gICAgdGhpcy5pbnMuX3JlbW92ZSh0aGlzKTtcbiAgICB0aGlzLm91dCA9IG51bGwgYXMgYW55O1xuICAgIHRoaXMuaWQgPSBudWxsO1xuICB9XG5cbiAgY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuaWQ7XG4gICAgaWYgKGlkICE9PSBudWxsKSB7XG4gICAgICBjbGVhckludGVydmFsKGlkKTtcbiAgICB9XG4gICAgdGhpcy5pZCA9IG51bGw7XG4gIH1cblxuICBfbih0OiBUKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuICAgIHRoaXMudCA9IHQ7XG4gICAgdGhpcy5pZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuICAgICAgdS5fbih0KTtcbiAgICAgIHRoaXMudCA9IE5PO1xuICAgIH0sIHRoaXMuZHQpO1xuICB9XG5cbiAgX2UoZXJyOiBhbnkpIHtcbiAgICBjb25zdCB1ID0gdGhpcy5vdXQ7XG4gICAgaWYgKCF1KSByZXR1cm47XG4gICAgdGhpcy5jbGVhckludGVydmFsKCk7XG4gICAgdS5fZShlcnIpO1xuICB9XG5cbiAgX2MoKSB7XG4gICAgY29uc3QgdSA9IHRoaXMub3V0O1xuICAgIGlmICghdSkgcmV0dXJuO1xuICAgIHRoaXMuY2xlYXJJbnRlcnZhbCgpO1xuICAgIGlmICh0aGlzLnQgIT0gTk8pIHUuX24odGhpcy50KTtcbiAgICB0aGlzLnQgPSBOTztcbiAgICB1Ll9jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxheXMgZXZlbnRzIHVudGlsIGEgY2VydGFpbiBhbW91bnQgb2Ygc2lsZW5jZSBoYXMgcGFzc2VkLiBJZiB0aGF0IHRpbWVzcGFuXG4gKiBvZiBzaWxlbmNlIGlzIG5vdCBtZXQgdGhlIGV2ZW50IGlzIGRyb3BwZWQuXG4gKlxuICogTWFyYmxlIGRpYWdyYW06XG4gKlxuICogYGBgdGV4dFxuICogLS0xLS0tLTItLTMtLTQtLS0tNXxcbiAqICAgICBkZWJvdW5jZSg2MClcbiAqIC0tLS0tMS0tLS0tLS0tLS00LS18XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgZnJvbURpYWdyYW0gZnJvbSAneHN0cmVhbS9leHRyYS9mcm9tRGlhZ3JhbSdcbiAqIGltcG9ydCBkZWJvdW5jZSBmcm9tICd4c3RyZWFtL2V4dHJhL2RlYm91bmNlJ1xuICpcbiAqIGNvbnN0IHN0cmVhbSA9IGZyb21EaWFncmFtKCctLTEtLS0tMi0tMy0tNC0tLS01fCcpXG4gKiAgLmNvbXBvc2UoZGVib3VuY2UoNjApKVxuICpcbiAqIHN0cmVhbS5hZGRMaXN0ZW5lcih7XG4gKiAgIG5leHQ6IGkgPT4gY29uc29sZS5sb2coaSksXG4gKiAgIGVycm9yOiBlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpLFxuICogICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ2NvbXBsZXRlZCcpXG4gKiB9KVxuICogYGBgXG4gKlxuICogYGBgdGV4dFxuICogPiAxXG4gKiA+IDRcbiAqID4gY29tcGxldGVkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcGVyaW9kIFRoZSBhbW91bnQgb2Ygc2lsZW5jZSByZXF1aXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJuIHtTdHJlYW19XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlPFQ+KHBlcmlvZDogbnVtYmVyKTogKGluczogU3RyZWFtPFQ+KSA9PiBTdHJlYW08VD4ge1xuICByZXR1cm4gZnVuY3Rpb24gZGVib3VuY2VPcGVyYXRvcihpbnM6IFN0cmVhbTxUPikge1xuICAgIHJldHVybiBuZXcgU3RyZWFtPFQ+KG5ldyBEZWJvdW5jZU9wZXJhdG9yKHBlcmlvZCwgaW5zKSk7XG4gIH07XG59XG4iXX0=
\No newline at end of file