Compare commits

..

No commits in common. 'd25d3d63a18d3b353e20ca84e6325bdf9de1be76' and '487023b2c0b1592b559e5ca6f7b939f19a4a56fb' have entirely different histories.

@ -2,46 +2,25 @@
const Promise = require("bluebird"); const Promise = require("bluebird");
const ms = require("ms"); const ms = require("ms");
const promiseDelayEvery = require("@joepie91/promise-delay-every"); const promiseDelaySince = require("@joepie91/promise-delay-every");
const propagateAbort = require("@promistream/propagate-abort"); const propagateAbort = require("@ppstreams/propagate-abort");
const propagatePeek = require("@promistream/propagate-peek");
const debug = require("debug")("promistream:rate-limit");
function makeClonableInstance(interval) { module.exports = function rateLimitedStream(interval) {
let intervalInMilliseconds = (typeof interval === "number") let intervalInMilliseconds = (typeof interval === "number")
? interval ? interval
: ms(interval); : ms(interval);
debug(`Creating clonable with interval of ${intervalInMilliseconds}ms`); let delayer = promiseDelaySince(intervalInMilliseconds);
let delayer = promiseDelayEvery(intervalInMilliseconds); return {
description: `rate-limited stream (1 per ${interval})`,
return function createClone () { read: (source) => {
debug("Creating clone"); return Promise.try(() => {
return delayer();
return { }).then(() => {
_promistreamVersion: 0, return source.read();
description: `rate-limited stream (1 per ${interval})`, });
read: (source) => { },
return Promise.try(() => { abort: propagateAbort
debug("Attempted read"); }
return delayer(); };
}).then(() => {
debug("Delay passed, completing read");
return source.read();
});
},
peek: propagatePeek,
abort: propagateAbort
};
};
}
module.exports = function rateLimitedStream(... args) {
// Internally, we treat a non-clonable stream as a clonable stream that will only ever have one clone - this makes implementation much simpler
let createClone = makeClonableInstance(... args);
return createClone();
};
module.exports.clonable = makeClonableInstance;

@ -1,16 +1,14 @@
{ {
"name": "@promistream/rate-limit", "name": "@ppstreams/rate-limit",
"version": "1.0.1", "version": "1.0.0",
"main": "index.js", "main": "index.js",
"repository": "http://git.cryto.net/promistream/rate-limit.git", "repository": "http://git.cryto.net/ppstreams/rate-limit.git",
"author": "Sven Slootweg <admin@cryto.net>", "author": "Sven Slootweg <admin@cryto.net>",
"license": "WTFPL OR CC0-1.0", "license": "WTFPL OR CC0-1.0",
"dependencies": { "dependencies": {
"@joepie91/promise-delay-every": "^1.0.0", "@joepie91/promise-delay-every": "^1.0.0",
"@promistream/propagate-abort": "^0.1.6", "@ppstreams/propagate-abort": "^0.1.2",
"@promistream/propagate-peek": "^0.1.1",
"bluebird": "^3.5.4", "bluebird": "^3.5.4",
"debug": "^4.3.1",
"ms": "^2.1.1" "ms": "^2.1.1"
} }
} }

Loading…
Cancel
Save