You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-06 02:15:48 +03:00
* churn(test): use redislabs/client-libs-test for testing This switches our testing infrastructure from redis/redis-stack to redislabs/client-libs-test Docker image across all packages. This change also updates the default Docker version from 7.4.0-v1 to 8.0-M04-pre. * churn(test): verify CONFIG SET / GET compatibility with Redis 8 - Add tests for Redis 8 search configuration settings - Deprecate Redis Search CONFIG commands in favor of standard CONFIG - Test read-only config restrictions for Redis 8 * churn(test): handle Redis 8 coordinate precision in GEOPOS - Update GEOPOS tests to handle increased precision in Redis 8 (17 decimal places vs 14) - Add precision-aware coordinate comparison helper - Add comprehensive test suite for coordinate comparison function * test(search): adapt SUGGET tests for Redis 8 empty results - Update tests to expect empty array ([]) instead of null for SUGGET variants - Affects sugGet, sugGetWithPayloads, sugGetWithScores, and sugGetWithScoresWithPayloads * test(search): support Redis 8 INFO indexes_all field - Add indexes_all field introduced in Redis 8 to index definition test * refactor!(search): simplify PROFILE commands to return raw response - BREAKING CHANGE: FT.PROFILE now returns raw response, letting users implement their own parsing * test: improve version-specific test coverage - Add `testWithClientIfVersionWithinRange` method to run tests for specific Redis versions - Refactor TestUtils to handle version comparisons more accurately - Update test utilities across Redis modules to run tests against multiple versions, and not against latest only
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { CommandParser } from '@redis/client/dist/lib/client/parser';
|
|
import { ArrayReply, Command, RedisArgument, ReplyUnion, TuplesReply, UnwrapReply } from '@redis/client/dist/lib/RESP/types';
|
|
import { AggregateReply } from './AGGREGATE';
|
|
import SEARCH, { FtSearchOptions, SearchRawReply, SearchReply, parseSearchOptions } from './SEARCH';
|
|
|
|
export type ProfileRawReplyResp2<T> = TuplesReply<[
|
|
T,
|
|
ArrayReply<ReplyUnion>
|
|
]>;
|
|
|
|
type ProfileSearchResponseResp2 = ProfileRawReplyResp2<SearchRawReply>;
|
|
|
|
export interface ProfileReplyResp2 {
|
|
results: SearchReply | AggregateReply;
|
|
profile: ReplyUnion;
|
|
}
|
|
|
|
export interface ProfileOptions {
|
|
LIMITED?: true;
|
|
}
|
|
|
|
export default {
|
|
NOT_KEYED_COMMAND: true,
|
|
IS_READ_ONLY: true,
|
|
parseCommand(
|
|
parser: CommandParser,
|
|
index: RedisArgument,
|
|
query: RedisArgument,
|
|
options?: ProfileOptions & FtSearchOptions
|
|
) {
|
|
parser.push('FT.PROFILE', index, 'SEARCH');
|
|
|
|
if (options?.LIMITED) {
|
|
parser.push('LIMITED');
|
|
}
|
|
|
|
parser.push('QUERY', query);
|
|
|
|
parseSearchOptions(parser, options);
|
|
},
|
|
transformReply: {
|
|
2: (reply: UnwrapReply<ProfileSearchResponseResp2>): ProfileReplyResp2 => {
|
|
return {
|
|
results: SEARCH.transformReply[2](reply[0]),
|
|
profile: reply[1]
|
|
};
|
|
},
|
|
3: (reply: ReplyUnion): ReplyUnion => reply
|
|
},
|
|
unstableResp3: true
|
|
} as const satisfies Command;
|