renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
44 lines (43 loc) • 1.09 kB
JavaScript
import { logger } from "../../logger/index.js";
import { parseUrl } from "../url.js";
import { getThrottleIntervalMs } from "./rate-limits.js";
import pThrottle from "p-throttle";
//#region lib/util/http/throttle.ts
const hostThrottles = /* @__PURE__ */ new Map();
var Throttle = class {
throttle;
constructor(interval) {
this.throttle = pThrottle({
strict: true,
limit: 1,
interval
});
}
add(task) {
return this.throttle(task)();
}
};
function getThrottle(url) {
const host = parseUrl(url)?.host;
if (!host) {
logger.debug(`No host on ${url}`);
return null;
}
let throttle = hostThrottles.get(host);
if (throttle === void 0) {
throttle = null;
const throttleMs = getThrottleIntervalMs(url);
if (throttleMs) {
logger.debug(`Using throttle ${throttleMs} intervalMs for host ${host}`);
throttle = new Throttle(throttleMs);
} else logger.trace({ host }, "No throttle");
}
hostThrottles.set(host, throttle);
return throttle;
}
function clear() {
hostThrottles.clear();
}
//#endregion
export { clear, getThrottle };
//# sourceMappingURL=throttle.js.map