UNPKG

multitude

Version:

Comprehensive streams for push and pull

49 lines (40 loc) 4.28 kB
"use strict"; 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