lavaclient
Version:
A simple, easy-to-use, and flexible lavalink client for node.js
25 lines • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.nextOrThrow = exports.DefaultLoadBalancer = void 0;
const DefaultLoadBalancer = (cluster, penaltyProviders = []) => {
const available = () => [...cluster.nodes.values()].filter((it) => it.ws.active);
const penalties = (node) => node.penalties.calculate() + penaltyProviders.reduce((acc, it) => acc + it.calculate(node), 0);
return {
next: () => {
const nodes = available();
if (nodes.length <= 1) {
return nodes[0] ?? null;
}
return nodes.sort((a, b) => penalties(a) - penalties(b))[0] ?? null;
},
};
};
exports.DefaultLoadBalancer = DefaultLoadBalancer;
const nextOrThrow = (lb) => {
const node = lb.next();
if (!node)
throw new Error("No nodes available");
return node;
};
exports.nextOrThrow = nextOrThrow;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFsYW5jZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2x1c3Rlci9iYWxhbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwQk8sTUFBTSxtQkFBbUIsR0FBd0IsQ0FBQyxPQUFPLEVBQUUsbUJBQTJDLEVBQUUsRUFBRSxFQUFFO0lBQy9HLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFLENBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkcsT0FBTztRQUNILElBQUksRUFBRSxHQUFHLEVBQUU7WUFDUCxNQUFNLEtBQUssR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUUxQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7YUFDM0I7WUFHRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3hFLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBakJXLFFBQUEsbUJBQW1CLHVCQWlCOUI7QUFZSyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtJQUM1QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsSUFBSSxDQUFDLElBQUk7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDakQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBSlcsUUFBQSxXQUFXLGVBSXRCIn0=