multitude
Version:
Comprehensive streams for push and pull
49 lines (40 loc) • 4.28 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.first = first;
var _transform = require("../../utils/transform");
var _take = require("../filter/take");
var _pipettes = require("pipettes");
/**
* Returns a *Promise* of the first value an *Observable* emits.
* Such *Promise* will reject if the *Observable* errors
* before emitting a value.
* @param strict if `true`, the returned *Promise* will reject if the *Observable* completes before emitting a value instead of resolving with undefined.
*/
function first(strict) {
return (0, _transform.transform)(observable => {
let emitted = false;
return new Promise((resolve, reject) => {
(0, _pipettes.into)(observable, (0, _take.take)(1)).subscribe({
next(value) {
emitted = true;
resolve(value);
},
error(reason) {
emitted = true;
reject(reason);
},
complete() {
if (emitted) return;
if (strict) {
reject(Error(`Observable completed before emitting a value`));
} else {
resolve();
}
}
});
});
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wdXNoL29wZXJhdG9ycy9jb25zdW1lL2ZpcnN0LnRzIl0sIm5hbWVzIjpbImZpcnN0Iiwic3RyaWN0Iiwib2JzZXJ2YWJsZSIsImVtaXR0ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInN1YnNjcmliZSIsIm5leHQiLCJ2YWx1ZSIsImVycm9yIiwicmVhc29uIiwiY29tcGxldGUiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLEtBQVQsQ0FDTEMsTUFESyxFQUVzQztBQUMzQyxTQUFPLDBCQUFXQyxVQUFELElBQWdCO0FBQy9CLFFBQUlDLE9BQU8sR0FBRyxLQUFkO0FBQ0EsV0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDLDBCQUFLSixVQUFMLEVBQWlCLGdCQUFLLENBQUwsQ0FBakIsRUFBMEJLLFNBQTFCLENBQW9DO0FBQ2xDQyxRQUFBQSxJQUFJLENBQUNDLEtBQUQsRUFBUTtBQUNWTixVQUFBQSxPQUFPLEdBQUcsSUFBVjtBQUNBRSxVQUFBQSxPQUFPLENBQUNJLEtBQUQsQ0FBUDtBQUNELFNBSmlDOztBQUtsQ0MsUUFBQUEsS0FBSyxDQUFDQyxNQUFELEVBQVM7QUFDWlIsVUFBQUEsT0FBTyxHQUFHLElBQVY7QUFDQUcsVUFBQUEsTUFBTSxDQUFDSyxNQUFELENBQU47QUFDRCxTQVJpQzs7QUFTbENDLFFBQUFBLFFBQVEsR0FBRztBQUNULGNBQUlULE9BQUosRUFBYTs7QUFDYixjQUFJRixNQUFKLEVBQVk7QUFDVkssWUFBQUEsTUFBTSxDQUFDTyxLQUFLLENBQUUsOENBQUYsQ0FBTixDQUFOO0FBQ0QsV0FGRCxNQUVPO0FBQ0xSLFlBQUFBLE9BQU87QUFDUjtBQUNGOztBQWhCaUMsT0FBcEM7QUFrQkQsS0FuQk0sQ0FBUDtBQW9CRCxHQXRCTSxDQUFQO0FBdUJEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHVzaCB9IGZyb20gJ0BkZWZpbml0aW9ucyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2Zvcm0nO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJy4uL2ZpbHRlci90YWtlJztcbmltcG9ydCB7IGludG8gfSBmcm9tICdwaXBldHRlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdDxUPihzdHJpY3Q6IHRydWUpOiBQdXNoLlRyYW5zZm9ybWF0aW9uPFQsIFByb21pc2U8VD4+O1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0PFQ+KFxuICBzdHJpY3Q/OiBib29sZWFuXG4pOiBQdXNoLlRyYW5zZm9ybWF0aW9uPFQsIFByb21pc2U8VCB8IHZvaWQ+PjtcblxuLyoqXG4gKiBSZXR1cm5zIGEgKlByb21pc2UqIG9mIHRoZSBmaXJzdCB2YWx1ZSBhbiAqT2JzZXJ2YWJsZSogZW1pdHMuXG4gKiBTdWNoICpQcm9taXNlKiB3aWxsIHJlamVjdCBpZiB0aGUgKk9ic2VydmFibGUqIGVycm9yc1xuICogYmVmb3JlIGVtaXR0aW5nIGEgdmFsdWUuXG4gKiBAcGFyYW0gc3RyaWN0IGlmIGB0cnVlYCwgdGhlIHJldHVybmVkICpQcm9taXNlKiB3aWxsIHJlamVjdCBpZiB0aGUgKk9ic2VydmFibGUqIGNvbXBsZXRlcyBiZWZvcmUgZW1pdHRpbmcgYSB2YWx1ZSBpbnN0ZWFkIG9mIHJlc29sdmluZyB3aXRoIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0PFQ+KFxuICBzdHJpY3Q/OiBib29sZWFuXG4pOiBQdXNoLlRyYW5zZm9ybWF0aW9uPFQsIFByb21pc2U8VCB8IHZvaWQ+PiB7XG4gIHJldHVybiB0cmFuc2Zvcm0oKG9ic2VydmFibGUpID0+IHtcbiAgICBsZXQgZW1pdHRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbnRvKG9ic2VydmFibGUsIHRha2UoMSkpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICBlbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IocmVhc29uKSB7XG4gICAgICAgICAgZW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICAgIGlmIChlbWl0dGVkKSByZXR1cm47XG4gICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgcmVqZWN0KEVycm9yKGBPYnNlcnZhYmxlIGNvbXBsZXRlZCBiZWZvcmUgZW1pdHRpbmcgYSB2YWx1ZWApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
;