multitude
Version:
Comprehensive streams for push and pull
49 lines (42 loc) • 4.77 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.interval = interval;
var _Observable = require("../classes/Observable");
var _typeCore = require("type-core");
function interval(every) {
const options = !every || _typeCore.TypeGuard.isNumber(every) ? {
every
} : every;
const cancel = options.cancel;
const promise = _typeCore.TypeGuard.isPromiseLike(cancel) ? cancel : null;
const callback = _typeCore.TypeGuard.isFunction(cancel) ? cancel : null;
return new _Observable.Observable(obs => {
let index = -1;
const interval = setInterval(() => {
index++;
obs.next(index);
if (!callback) return;
try {
if (callback(index)) {
obs.complete();
clearInterval(interval);
}
} catch (err) {
obs.error(err);
}
}, options.every || 0);
if (promise) {
promise.then(() => {
clearInterval(interval);
obs.complete();
}, err => {
clearInterval(interval);
obs.error(err);
});
}
return () => clearInterval(interval);
});
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdXNoL2NyZWF0b3JzL2ludGVydmFsLnRzIl0sIm5hbWVzIjpbImludGVydmFsIiwiZXZlcnkiLCJvcHRpb25zIiwiVHlwZUd1YXJkIiwiaXNOdW1iZXIiLCJjYW5jZWwiLCJwcm9taXNlIiwiaXNQcm9taXNlTGlrZSIsImNhbGxiYWNrIiwiaXNGdW5jdGlvbiIsIk9ic2VydmFibGUiLCJvYnMiLCJpbmRleCIsInNldEludGVydmFsIiwibmV4dCIsImNvbXBsZXRlIiwiY2xlYXJJbnRlcnZhbCIsImVyciIsImVycm9yIiwidGhlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUNBOztBQU9PLFNBQVNBLFFBQVQsQ0FDTEMsS0FESyxFQUVvQjtBQUN6QixRQUFNQyxPQUFPLEdBQUcsQ0FBQ0QsS0FBRCxJQUFVRSxvQkFBVUMsUUFBVixDQUFtQkgsS0FBbkIsQ0FBVixHQUFzQztBQUFFQSxJQUFBQTtBQUFGLEdBQXRDLEdBQWtEQSxLQUFsRTtBQUVBLFFBQU1JLE1BQU0sR0FBR0gsT0FBTyxDQUFDRyxNQUF2QjtBQUNBLFFBQU1DLE9BQU8sR0FBR0gsb0JBQVVJLGFBQVYsQ0FBd0JGLE1BQXhCLElBQWtDQSxNQUFsQyxHQUEyQyxJQUEzRDtBQUNBLFFBQU1HLFFBQVEsR0FBR0wsb0JBQVVNLFVBQVYsQ0FBcUJKLE1BQXJCLElBQStCQSxNQUEvQixHQUF3QyxJQUF6RDtBQUVBLFNBQU8sSUFBSUssc0JBQUosQ0FBZ0JDLEdBQUQsSUFBUztBQUM3QixRQUFJQyxLQUFLLEdBQUcsQ0FBQyxDQUFiO0FBQ0EsVUFBTVosUUFBUSxHQUFHYSxXQUFXLENBQUMsTUFBTTtBQUNqQ0QsTUFBQUEsS0FBSztBQUNMRCxNQUFBQSxHQUFHLENBQUNHLElBQUosQ0FBU0YsS0FBVDtBQUVBLFVBQUksQ0FBQ0osUUFBTCxFQUFlOztBQUNmLFVBQUk7QUFDRixZQUFJQSxRQUFRLENBQUNJLEtBQUQsQ0FBWixFQUFxQjtBQUNuQkQsVUFBQUEsR0FBRyxDQUFDSSxRQUFKO0FBQ0FDLFVBQUFBLGFBQWEsQ0FBQ2hCLFFBQUQsQ0FBYjtBQUNEO0FBQ0YsT0FMRCxDQUtFLE9BQU9pQixHQUFQLEVBQVk7QUFDWk4sUUFBQUEsR0FBRyxDQUFDTyxLQUFKLENBQVVELEdBQVY7QUFDRDtBQUNGLEtBYjJCLEVBYXpCZixPQUFPLENBQUNELEtBQVIsSUFBaUIsQ0FiUSxDQUE1Qjs7QUFlQSxRQUFJSyxPQUFKLEVBQWE7QUFDWEEsTUFBQUEsT0FBTyxDQUFDYSxJQUFSLENBQ0UsTUFBTTtBQUNKSCxRQUFBQSxhQUFhLENBQUNoQixRQUFELENBQWI7QUFDQVcsUUFBQUEsR0FBRyxDQUFDSSxRQUFKO0FBQ0QsT0FKSCxFQUtHRSxHQUFELElBQVM7QUFDUEQsUUFBQUEsYUFBYSxDQUFDaEIsUUFBRCxDQUFiO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ08sS0FBSixDQUFVRCxHQUFWO0FBQ0QsT0FSSDtBQVVEOztBQUVELFdBQU8sTUFBTUQsYUFBYSxDQUFDaEIsUUFBRCxDQUExQjtBQUNELEdBL0JNLENBQVA7QUFnQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQdXNoIH0gZnJvbSAnQGRlZmluaXRpb25zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9jbGFzc2VzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgVW5hcnlGbiwgVHlwZUd1YXJkIH0gZnJvbSAndHlwZS1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcnZhbE9wdGlvbnMge1xuICBldmVyeT86IG51bWJlcjtcbiAgY2FuY2VsPzogVW5hcnlGbjxudW1iZXIsIGJvb2xlYW4+IHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnZhbChcbiAgZXZlcnk/OiBudW1iZXIgfCBJbnRlcnZhbE9wdGlvbnNcbik6IFB1c2guT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgY29uc3Qgb3B0aW9ucyA9ICFldmVyeSB8fCBUeXBlR3VhcmQuaXNOdW1iZXIoZXZlcnkpID8geyBldmVyeSB9IDogZXZlcnk7XG5cbiAgY29uc3QgY2FuY2VsID0gb3B0aW9ucy5jYW5jZWw7XG4gIGNvbnN0IHByb21pc2UgPSBUeXBlR3VhcmQuaXNQcm9taXNlTGlrZShjYW5jZWwpID8gY2FuY2VsIDogbnVsbDtcbiAgY29uc3QgY2FsbGJhY2sgPSBUeXBlR3VhcmQuaXNGdW5jdGlvbihjYW5jZWwpID8gY2FuY2VsIDogbnVsbDtcblxuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9icykgPT4ge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaW5kZXgrKztcbiAgICAgIG9icy5uZXh0KGluZGV4KTtcblxuICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKGluZGV4KSkge1xuICAgICAgICAgIG9icy5jb21wbGV0ZSgpO1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgb2JzLmVycm9yKGVyciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSwgb3B0aW9ucy5ldmVyeSB8fCAwKTtcblxuICAgIGlmIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlLnRoZW4oXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICBvYnMuY29tcGxldGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIG9icy5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSk7XG59XG4iXX0=
;