Skip to content

Commit b4b67f6

Browse files
committed
Merge branch 'v5-search-broken' into change-testing
2 parents 5202955 + ea51f39 commit b4b67f6

File tree

107 files changed

+2871
-1272
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+2871
-1272
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
fail-fast: false
1818
matrix:
1919
node-version: ['18', '20']
20-
redis-version: ['5', '6.0', '6.2', '7.0', '7.2']
20+
redis-version: ['5', '6.0', '6.2', '7.0', '7.2', '7.4']
2121
steps:
2222
- uses: actions/checkout@v4
2323
with:

package-lock.json

Lines changed: 26 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/bloom/lib/commands/bloom/INFO.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ describe('BF.INFO', () => {
1717
]);
1818

1919
assert.equal(typeof reply, 'object');
20-
assert.equal(reply.capacity, 100);
21-
assert.equal(typeof reply.size, 'number');
22-
assert.equal(typeof reply.numberOfFilters, 'number');
23-
assert.equal(typeof reply.numberOfInsertedItems, 'number');
24-
assert.equal(typeof reply.expansionRate, 'number');
20+
assert.equal(reply['Capacity'], 100);
21+
assert.equal(typeof reply['Size'], 'number');
22+
assert.equal(typeof reply['Number of filters'], 'number');
23+
assert.equal(typeof reply['Number of items inserted'], 'number');
24+
assert.equal(typeof reply['Expansion rate'], 'number');
2525
}, GLOBAL.SERVERS.OPEN);
2626
});
Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
1-
import { RedisArgument, Command } from '@redis/client/dist/lib/RESP/types';
1+
import { RedisArgument, Command, UnwrapReply, NullReply, NumberReply, TuplesToMapReply, Resp2Reply, SimpleStringReply, TypeMapping } from '@redis/client/dist/lib/RESP/types';
2+
import { transformInfoV2Reply } from '.';
3+
4+
export type BfInfoReplyMap = TuplesToMapReply<[
5+
[SimpleStringReply<'Capacity'>, NumberReply],
6+
[SimpleStringReply<'Size'>, NumberReply],
7+
[SimpleStringReply<'Number of filters'>, NumberReply],
8+
[SimpleStringReply<'Number of items inserted'>, NumberReply],
9+
[SimpleStringReply<'Expansion rate'>, NullReply | NumberReply]
10+
]>;
11+
12+
export interface BfInfoReply {
13+
capacity: NumberReply;
14+
size: NumberReply;
15+
numberOfFilters: NumberReply;
16+
numberOfInsertedItems: NumberReply;
17+
expansionRate: NullReply | NumberReply;
18+
}
219

320
export default {
421
FIRST_KEY_INDEX: 1,
522
IS_READ_ONLY: true,
623
transformArguments(key: RedisArgument) {
724
return ['BF.INFO', key];
825
},
9-
// TODO
10-
transformReply: undefined as unknown as () => any
26+
transformReply: {
27+
2: (reply: UnwrapReply<Resp2Reply<BfInfoReplyMap>>, _, typeMapping?: TypeMapping): BfInfoReplyMap => {
28+
return transformInfoV2Reply<BfInfoReplyMap>(reply, typeMapping);
29+
},
30+
3: undefined as unknown as () => BfInfoReplyMap
31+
}
1132
} as const satisfies Command;

packages/bloom/lib/commands/bloom/index.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import type { RedisCommands } from '@redis/client/dist/lib/RESP/types';
1+
import type { RedisCommands, TypeMapping } from '@redis/client/dist/lib/RESP/types';
2+
23
import ADD from './ADD';
34
import CARD from './CARD';
45
import EXISTS from './EXISTS';
@@ -9,6 +10,7 @@ import MADD from './MADD';
910
import MEXISTS from './MEXISTS';
1011
import RESERVE from './RESERVE';
1112
import SCANDUMP from './SCANDUMP';
13+
import { RESP_TYPES } from '@redis/client';
1214

1315
export default {
1416
ADD,
@@ -32,3 +34,31 @@ export default {
3234
SCANDUMP,
3335
scanDump: SCANDUMP
3436
} as const satisfies RedisCommands;
37+
38+
export function transformInfoV2Reply<T>(reply: Array<any>, typeMapping?: TypeMapping): T {
39+
const mapType = typeMapping ? typeMapping[RESP_TYPES.MAP] : undefined;
40+
41+
switch (mapType) {
42+
case Array: {
43+
return reply as unknown as T;
44+
}
45+
case Map: {
46+
const ret = new Map<string, any>();
47+
48+
for (let i = 0; i < reply.length; i += 2) {
49+
ret.set(reply[i].toString(), reply[i + 1]);
50+
}
51+
52+
return ret as unknown as T;
53+
}
54+
default: {
55+
const ret = Object.create(null);
56+
57+
for (let i = 0; i < reply.length; i += 2) {
58+
ret[reply[i].toString()] = reply[i + 1];
59+
}
60+
61+
return ret as unknown as T;
62+
}
63+
}
64+
}

packages/bloom/lib/commands/count-min-sketch/INFO.spec.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ describe('CMS.INFO', () => {
1818
client.cms.info('key')
1919
]);
2020

21-
assert.deepEqual(reply, {
22-
width,
23-
depth,
24-
count: 0
25-
});
21+
const expected = Object.create(null);
22+
expected['width'] = width;
23+
expected['depth'] = depth;
24+
expected['count'] = 0;
25+
26+
assert.deepEqual(reply, expected);
2627
}, GLOBAL.SERVERS.OPEN);
2728
});
Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
import { RedisArgument, TuplesToMapReply, BlobStringReply, NumberReply, UnwrapReply, Resp2Reply, Command } from '@redis/client/dist/lib/RESP/types';
1+
import { RedisArgument, TuplesToMapReply, NumberReply, UnwrapReply, Resp2Reply, Command, SimpleStringReply, TypeMapping } from '@redis/client/dist/lib/RESP/types';
2+
import { transformInfoV2Reply } from '../bloom';
23

3-
export type BfInfoReply = TuplesToMapReply<[
4-
[BlobStringReply<'width'>, NumberReply],
5-
[BlobStringReply<'depth'>, NumberReply],
6-
[BlobStringReply<'count'>, NumberReply]
4+
export type CmsInfoReplyMap = TuplesToMapReply<[
5+
[SimpleStringReply<'width'>, NumberReply],
6+
[SimpleStringReply<'depth'>, NumberReply],
7+
[SimpleStringReply<'count'>, NumberReply]
78
]>;
9+
10+
export interface CmsInfoReply {
11+
width: NumberReply;
12+
depth: NumberReply;
13+
count: NumberReply;
14+
}
815

916
export default {
1017
FIRST_KEY_INDEX: 1,
@@ -13,11 +20,9 @@ export default {
1320
return ['CMS.INFO', key];
1421
},
1522
transformReply: {
16-
2: (reply: UnwrapReply<Resp2Reply<BfInfoReply>>) => ({
17-
width: reply[1],
18-
depth: reply[3],
19-
count: reply[5]
20-
}),
21-
3: undefined as unknown as () => BfInfoReply
23+
2: (reply: UnwrapReply<Resp2Reply<CmsInfoReplyMap>>, _, typeMapping?: TypeMapping): CmsInfoReply => {
24+
return transformInfoV2Reply<CmsInfoReply>(reply, typeMapping);
25+
},
26+
3: undefined as unknown as () => CmsInfoReply
2227
}
2328
} as const satisfies Command;

packages/bloom/lib/commands/cuckoo/INFO.spec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ describe('CF.INFO', () => {
1717
]);
1818

1919
assert.equal(typeof reply, 'object');
20-
assert.equal(typeof reply.size, 'number');
21-
assert.equal(typeof reply.numberOfBuckets, 'number');
22-
assert.equal(typeof reply.numberOfFilters, 'number');
23-
assert.equal(typeof reply.numberOfInsertedItems, 'number');
24-
assert.equal(typeof reply.numberOfDeletedItems, 'number');
25-
assert.equal(typeof reply.bucketSize, 'number');
26-
assert.equal(typeof reply.expansionRate, 'number');
27-
assert.equal(typeof reply.maxIteration, 'number');
20+
assert.equal(typeof reply['Size'], 'number');
21+
assert.equal(typeof reply['Number of buckets'], 'number');
22+
assert.equal(typeof reply['Number of filters'], 'number');
23+
assert.equal(typeof reply['Number of items inserted'], 'number');
24+
assert.equal(typeof reply['Number of items deleted'], 'number');
25+
assert.equal(typeof reply['Bucket size'], 'number');
26+
assert.equal(typeof reply['Expansion rate'], 'number');
27+
assert.equal(typeof reply['Max iterations'], 'number');
2828
}, GLOBAL.SERVERS.OPEN);
2929
});
Lines changed: 19 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,27 @@
1-
import { RedisArgument, Command } from '@redis/client/dist/lib/RESP/types';
1+
import { RedisArgument, Command, NumberReply, TuplesToMapReply, UnwrapReply, Resp2Reply, SimpleStringReply, TypeMapping } from '@redis/client/dist/lib/RESP/types';
2+
import { transformInfoV2Reply } from '../bloom';
3+
4+
export type CfInfoReplyMap = TuplesToMapReply<[
5+
[SimpleStringReply<'Size'>, NumberReply],
6+
[SimpleStringReply<'Number of buckets'>, NumberReply],
7+
[SimpleStringReply<'Number of filters'>, NumberReply],
8+
[SimpleStringReply<'Number of items inserted'>, NumberReply],
9+
[SimpleStringReply<'Number of items deleted'>, NumberReply],
10+
[SimpleStringReply<'Bucket size'>, NumberReply],
11+
[SimpleStringReply<'Expansion rate'>, NumberReply],
12+
[SimpleStringReply<'Max iterations'>, NumberReply]
13+
]>;
214

315
export default {
416
FIRST_KEY_INDEX: 1,
517
IS_READ_ONLY: true,
618
transformArguments(key: RedisArgument) {
719
return ['CF.INFO', key];
820
},
9-
// TODO
10-
// export type InfoRawReply = [
11-
// _: string,
12-
// size: number,
13-
// _: string,
14-
// numberOfBuckets: number,
15-
// _: string,
16-
// numberOfFilters: number,
17-
// _: string,
18-
// numberOfInsertedItems: number,
19-
// _: string,
20-
// numberOfDeletedItems: number,
21-
// _: string,
22-
// bucketSize: number,
23-
// _: string,
24-
// expansionRate: number,
25-
// _: string,
26-
// maxIteration: number
27-
// ];
28-
29-
// export interface InfoReply {
30-
// size: number;
31-
// numberOfBuckets: number;
32-
// numberOfFilters: number;
33-
// numberOfInsertedItems: number;
34-
// numberOfDeletedItems: number;
35-
// bucketSize: number;
36-
// expansionRate: number;
37-
// maxIteration: number;
38-
// }
39-
40-
// export function transformReply(reply: InfoRawReply): InfoReply {
41-
// return {
42-
// size: reply[1],
43-
// numberOfBuckets: reply[3],
44-
// numberOfFilters: reply[5],
45-
// numberOfInsertedItems: reply[7],
46-
// numberOfDeletedItems: reply[9],
47-
// bucketSize: reply[11],
48-
// expansionRate: reply[13],
49-
// maxIteration: reply[15]
50-
// };
51-
// }
52-
transformReply: undefined as unknown as () => any
21+
transformReply: {
22+
2: (reply: UnwrapReply<Resp2Reply<CfInfoReplyMap>>, _, typeMapping?: TypeMapping): CfInfoReplyMap => {
23+
return transformInfoV2Reply<CfInfoReplyMap>(reply, typeMapping);
24+
},
25+
3: undefined as unknown as () => CfInfoReplyMap
26+
}
5327
} as const satisfies Command;

packages/bloom/lib/commands/t-digest/INFO.spec.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ describe('TDIGEST.INFO', () => {
1616
client.tDigest.info('key')
1717
]);
1818

19-
assert(typeof reply.capacity, 'number');
20-
assert(typeof reply.mergedNodes, 'number');
21-
assert(typeof reply.unmergedNodes, 'number');
22-
assert(typeof reply.mergedWeight, 'number');
23-
assert(typeof reply.unmergedWeight, 'number');
24-
assert(typeof reply.totalCompression, 'number');
25-
assert(typeof reply.totalCompression, 'number');
19+
assert(typeof reply, 'object');
20+
assert(typeof reply['Compression'], 'number');
21+
assert(typeof reply['Capacity'], 'number');
22+
assert(typeof reply['Merged nodes'], 'number');
23+
assert(typeof reply['Unmerged nodes'], 'number');
24+
assert(typeof reply['Merged weight'], 'number');
25+
assert(typeof reply['Unmerged weight'], 'number');
26+
assert(typeof reply['Observations'], 'number');
27+
assert(typeof reply['Total compressions'], 'number');
28+
assert(typeof reply['Memory usage'], 'number');
2629
}, GLOBAL.SERVERS.OPEN);
2730
});

0 commit comments

Comments
 (0)