71 lines
2.5 KiB
JavaScript
71 lines
2.5 KiB
JavaScript
"use strict";
|
|
var __extends = (this && this.__extends) || function (d, b) {
|
|
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
var Subscriber_1 = require('../Subscriber');
|
|
/**
|
|
* Returns an observable of a single number that represents the number of items that either:
|
|
* Match a provided predicate function, _or_ if a predicate is not provided, the number
|
|
* represents the total count of all items in the source observable. The count is emitted
|
|
* by the returned observable when the source observable completes.
|
|
* @param {function} [predicate] a boolean function to select what values are to be counted.
|
|
* it is provided with arguments of:
|
|
* - `value`: the value from the source observable
|
|
* - `index`: the "index" of the value from the source observable
|
|
* - `source`: the source observable instance itself.
|
|
* @returns {Observable} an observable of one number that represents the count as described
|
|
* above
|
|
*/
|
|
function count(predicate) {
|
|
return this.lift(new CountOperator(predicate, this));
|
|
}
|
|
exports.count = count;
|
|
var CountOperator = (function () {
|
|
function CountOperator(predicate, source) {
|
|
this.predicate = predicate;
|
|
this.source = source;
|
|
}
|
|
CountOperator.prototype.call = function (subscriber) {
|
|
return new CountSubscriber(subscriber, this.predicate, this.source);
|
|
};
|
|
return CountOperator;
|
|
}());
|
|
var CountSubscriber = (function (_super) {
|
|
__extends(CountSubscriber, _super);
|
|
function CountSubscriber(destination, predicate, source) {
|
|
_super.call(this, destination);
|
|
this.predicate = predicate;
|
|
this.source = source;
|
|
this.count = 0;
|
|
this.index = 0;
|
|
}
|
|
CountSubscriber.prototype._next = function (value) {
|
|
if (this.predicate) {
|
|
this._tryPredicate(value);
|
|
}
|
|
else {
|
|
this.count++;
|
|
}
|
|
};
|
|
CountSubscriber.prototype._tryPredicate = function (value) {
|
|
var result;
|
|
try {
|
|
result = this.predicate(value, this.index++, this.source);
|
|
}
|
|
catch (err) {
|
|
this.destination.error(err);
|
|
return;
|
|
}
|
|
if (result) {
|
|
this.count++;
|
|
}
|
|
};
|
|
CountSubscriber.prototype._complete = function () {
|
|
this.destination.next(this.count);
|
|
this.destination.complete();
|
|
};
|
|
return CountSubscriber;
|
|
}(Subscriber_1.Subscriber));
|
|
//# sourceMappingURL=count.js.map
|