"use strict"; const Promise = require("bluebird"); const ms = require("ms"); const promiseDelaySince = require("@joepie91/promise-delay-every"); const propagateAbort = require("@ppstreams/propagate-abort"); module.exports = function rateLimitedStream(interval) { let intervalInMilliseconds = (typeof interval === "number") ? interval : ms(interval); let delayer = promiseDelaySince(intervalInMilliseconds); return { description: `rate-limited stream (1 per ${interval})`, read: (source) => { return Promise.try(() => { return delayer(); }).then(() => { return source.read(); }); }, abort: propagateAbort } };