1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-11 22:42:42 +03:00
Files
node-redis/packages/client/lib/commands/ROLE.ts
Leibale Eidelman b4bb68d8ab V5 branch (#2491)
* wip

* Worked on phrasing etc for v5 doc changes.

* Removed quite repetition of 'Rather'

* Update v4-to-v5.md

* Update v4-to-v5.md

* Update v4-to-v5.md

* WIP

* WIP

* clean SET command

* some more commands, multi.exec<'typed'>

* "typed" multi

* WIP

* upgrade deps

* wip

* wip

* fix #2469

* wip

* npm update

* wip

* wip

* wip

* wip

* some tests

* tests.yml

* wip

* wip

* merge master into v5

* some more commands

* some more commands

* WIP

* Release client@2.0.0-next.1

---------

Co-authored-by: Simon Prickett <simon@redislabs.com>
2023-04-30 11:18:46 -04:00

68 lines
1.6 KiB
TypeScript

import { ArrayReply, BlobStringReply, Command, NumberReply } from '../RESP/types';
type MasterRole = [
role: BlobStringReply<'master'>,
replicationOffest: NumberReply,
replicas: ArrayReply<[host: BlobStringReply, port: NumberReply, replicationOffest: NumberReply]>,
];
type SlaveRole = [
role: BlobStringReply<'slave'>,
masterHost: BlobStringReply,
masterPort: NumberReply,
state: BlobStringReply<'connect' | 'connecting' | 'sync' | 'connected'>,
dataReceived: NumberReply
];
type SentinelRole = [
role: BlobStringReply<'sentinel'>,
masterNames: ArrayReply<BlobStringReply>
];
type Role = MasterRole | SlaveRole | SentinelRole;
export default {
FIRST_KEY_INDEX: undefined,
IS_READ_ONLY: true,
transformArguments() {
return ['ROLE'];
},
transformReply(reply: Role) {
switch (reply[0] as Role[0]['DEFAULT']) {
case 'master': {
const [role, replicationOffest, replicas] = reply as MasterRole;
return {
role,
replicationOffest,
replicas: replicas.map(([host, port, replicationOffest]) => ({
host,
port,
replicationOffest,
})),
};
}
case 'slave': {
const [role, masterHost, masterPort, state, dataReceived] = reply as SlaveRole;
return {
role,
master: {
host: masterHost,
port: masterPort,
},
state,
dataReceived,
};
}
case 'sentinel': {
const [role, masterNames] = reply as SentinelRole;
return {
role,
masterNames,
};
}
}
}
} as const satisfies Command;