@valkey/client
Version:
The source code and documentation for this package are in the main [node-redis](https://github.com/redis/node-redis) repo.
75 lines (74 loc) • 2.84 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformReply = exports.ValkeyClusterNodeLinkStates = exports.transformArguments = void 0;
function transformArguments() {
return ["CLUSTER", "NODES"];
}
exports.transformArguments = transformArguments;
var ValkeyClusterNodeLinkStates;
(function (ValkeyClusterNodeLinkStates) {
ValkeyClusterNodeLinkStates["CONNECTED"] = "connected";
ValkeyClusterNodeLinkStates["DISCONNECTED"] = "disconnected";
})(ValkeyClusterNodeLinkStates || (exports.ValkeyClusterNodeLinkStates = ValkeyClusterNodeLinkStates = {}));
function transformReply(reply) {
const lines = reply.split("\n");
lines.pop(); // last line is empty
const mastersMap = new Map(), replicasMap = new Map();
for (const line of lines) {
const [id, address, flags, masterId, pingSent, pongRecv, configEpoch, linkState, ...slots] = line.split(" "), node = {
id,
address,
...transformNodeAddress(address),
flags: flags.split(","),
pingSent: Number(pingSent),
pongRecv: Number(pongRecv),
configEpoch: Number(configEpoch),
linkState: linkState,
};
if (masterId === "-") {
let replicas = replicasMap.get(id);
if (!replicas) {
replicas = [];
replicasMap.set(id, replicas);
}
mastersMap.set(id, {
...node,
slots: slots.map((slot) => {
// TODO: importing & exporting (https://redis.io/commands/cluster-nodes#special-slot-entries)
const [fromString, toString] = slot.split("-", 2), from = Number(fromString);
return {
from,
to: toString ? Number(toString) : from,
};
}),
replicas,
});
}
else {
const replicas = replicasMap.get(masterId);
if (!replicas) {
replicasMap.set(masterId, [node]);
}
else {
replicas.push(node);
}
}
}
return [...mastersMap.values()];
}
exports.transformReply = transformReply;
function transformNodeAddress(address) {
const indexOfColon = address.lastIndexOf(":"), indexOfAt = address.indexOf("@", indexOfColon), host = address.substring(0, indexOfColon);
if (indexOfAt === -1) {
return {
host,
port: Number(address.substring(indexOfColon + 1)),
cport: null,
};
}
return {
host: address.substring(0, indexOfColon),
port: Number(address.substring(indexOfColon + 1, indexOfAt)),
cport: Number(address.substring(indexOfAt + 1)),
};
}
;