Skip to content

Commit

Permalink
Addressed feedbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
luin committed Mar 27, 2022
1 parent 7d97b3c commit 93d66ad
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 6 deletions.
3 changes: 3 additions & 0 deletions bin/overrides.js
Expand Up @@ -2,6 +2,7 @@ const msetOverrides = {
overwrite: false,
defs: [
"$1(object: object, callback?: Callback<'OK'>): Result<'OK', Context>",
"$1(map: Map<string | Buffer | number, string | Buffer | number>, callback?: Callback<'OK'>): Result<'OK', Context>",
],
};

Expand All @@ -19,12 +20,14 @@ module.exports = {
overwrite: false,
defs: [
"$1(key: RedisKey, object: object, callback?: Callback<number>): Result<number, Context>",
"$1(key: RedisKey, map: Map<string | Buffer | number, string | Buffer | number>, callback?: Callback<'OK'>): Result<'OK', Context>",
],
},
hmset: {
overwrite: false,
defs: [
"$1(key: RedisKey, object: object, callback?: Callback<'OK'>): Result<'OK', Context>",
"$1(key: RedisKey, map: Map<string | Buffer | number, string | Buffer | number>, callback?: Callback<'OK'>): Result<'OK', Context>",
],
},
exec: {
Expand Down
18 changes: 18 additions & 0 deletions lib/utils/RedisCommander.ts
Expand Up @@ -4283,6 +4283,11 @@ interface RedisCommander<Context extends ClientContext = { type: "default" }> {
object: object,
callback?: Callback<"OK">
): Result<"OK", Context>;
hmset(
key: RedisKey,
map: Map<string | Buffer | number, string | Buffer | number>,
callback?: Callback<"OK">
): Result<"OK", Context>;
hmset(
...args: [
key: RedisKey,
Expand Down Expand Up @@ -4405,6 +4410,11 @@ interface RedisCommander<Context extends ClientContext = { type: "default" }> {
object: object,
callback?: Callback<number>
): Result<number, Context>;
hset(
key: RedisKey,
map: Map<string | Buffer | number, string | Buffer | number>,
callback?: Callback<"OK">
): Result<"OK", Context>;
hset(
...args: [
key: RedisKey,
Expand Down Expand Up @@ -5504,6 +5514,10 @@ interface RedisCommander<Context extends ClientContext = { type: "default" }> {
* - _since_: 1.0.1
*/
mset(object: object, callback?: Callback<"OK">): Result<"OK", Context>;
mset(
map: Map<string | Buffer | number, string | Buffer | number>,
callback?: Callback<"OK">
): Result<"OK", Context>;
mset(
...args: [
...keyValues: (RedisKey | string | Buffer | number)[],
Expand All @@ -5521,6 +5535,10 @@ interface RedisCommander<Context extends ClientContext = { type: "default" }> {
* - _since_: 1.0.1
*/
msetnx(object: object, callback?: Callback<"OK">): Result<"OK", Context>;
msetnx(
map: Map<string | Buffer | number, string | Buffer | number>,
callback?: Callback<"OK">
): Result<"OK", Context>;
msetnx(
...args: [
...keyValues: (RedisKey | string | Buffer | number)[],
Expand Down
9 changes: 8 additions & 1 deletion test/functional/transformer.ts
Expand Up @@ -11,13 +11,20 @@ describe("transformer", () => {
expect(await redis.hget("foo", "b")).to.eql("2");
});

it("should support Map", async () => {
it("should support Map with string keys", async () => {
const redis = new Redis();
const map = new Map();
map.set("a", 1);
map.set("b", "2");
map.set(42, true);
map.set(Buffer.from("buffer"), "utf8");
map.set(Buffer.from([0xff]), "binary");
expect(await redis.hmset("foo", map)).to.eql("OK");
expect(await redis.hget("foo", "a")).to.eql("1");
expect(await redis.hget("foo", "b")).to.eql("2");
expect(await redis.hget("foo", "42")).to.eql("true");
expect(await redis.hget("foo", "buffer")).to.eql("utf8");
expect(await redis.hget("foo", Buffer.from([0xff]))).to.eql("binary");
});

it("should not affect the old way", async () => {
Expand Down
30 changes: 25 additions & 5 deletions test/typing/transformers.test-d.ts
Expand Up @@ -7,25 +7,45 @@ interface User {
}

const user: User = { name: "Bob", title: "Engineer" };
const map = new Map([["key", "value"]]);
const stringMap = new Map([["key", "value"]]);
const numberMap = new Map([[42, "value"]]);
const bufferMap = new Map([[Buffer.from([0xff]), "value"]]);
const mixedMap = new Map<string | Buffer | number, string>([
[Buffer.from([0xff]), "value"],
[42, "value"],
["field", "value"],
]);

const redis = new Redis();

// mset
expectType<Promise<"OK">>(redis.mset("key1", "value1", "key2", "value2"));
expectType<Promise<"OK">>(redis.mset(user));
expectType<Promise<"OK">>(redis.mset(map));
expectType<Promise<"OK">>(redis.mset(stringMap));
expectType<Promise<"OK">>(redis.mset(numberMap));
expectType<Promise<"OK">>(redis.mset(bufferMap));
expectType<Promise<"OK">>(redis.mset(mixedMap));

// msetnx
expectType<Promise<"OK">>(redis.msetnx(user));
expectType<Promise<"OK">>(redis.msetnx(map));
expectType<Promise<"OK">>(redis.msetnx(stringMap));
expectType<Promise<"OK">>(redis.msetnx(numberMap));
expectType<Promise<"OK">>(redis.msetnx(bufferMap));
expectType<Promise<"OK">>(redis.msetnx(mixedMap));

// hmset
expectType<Promise<"OK">>(redis.hmset("key", user));
expectType<Promise<"OK">>(redis.hmset("key", map));
expectType<Promise<"OK">>(redis.hmset("key", stringMap));
expectType<Promise<"OK">>(redis.hmset("key", numberMap));
expectType<Promise<"OK">>(redis.hmset("key", bufferMap));
expectType<Promise<"OK">>(redis.hmset("key", mixedMap));

// hset
expectType<Promise<number>>(redis.hset("key", user));
expectType<Promise<number>>(redis.hset("key", map));
expectType<Promise<number>>(redis.hset("key", stringMap));
expectType<Promise<number>>(redis.hset("key", numberMap));
expectType<Promise<number>>(redis.hset("key", bufferMap));
expectType<Promise<number>>(redis.hset("key", mixedMap));

// hgetall
expectType<Promise<Record<string, string>>>(redis.hgetall("key"));

0 comments on commit 93d66ad

Please sign in to comment.