1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

Add support for redis functions (#2020)

* fix #1906 - implement BITFIELD_RO

* initial support for redis functions

* fix test utils

* redis functions commands and tests

* upgrade deps

* fix "Property 'uninstall' does not exist on type 'SinonFakeTimers'"

* upgrade dockers version

* Merge branch 'master' of github.com:redis/node-redis into functions

* fix FUNCTION LIST WITHCODE and FUNCTION STATS

* upgrade deps

* set minimum version for FCALL and FCALL_RO

* fix FUNCTION LOAD

* FUNCTION LOAD

* fix FUNCTION LOAD & FUNCTION LIST & FUNCTION LOAD WITHCODE

* fix FUNCTION_LIST_WITHCODE test
This commit is contained in:
Leibale Eidelman
2022-04-25 09:09:23 -04:00
committed by GitHub
parent 23b65133c9
commit 11c6c24881
51 changed files with 1406 additions and 324 deletions

View File

@@ -348,6 +348,10 @@ export interface EvalOptions {
arguments?: Array<string>;
}
export function evalFirstKeyIndex(options?: EvalOptions): string | undefined {
return options?.keys?.[0];
}
export function pushEvalArguments(args: Array<string>, options?: EvalOptions): Array<string> {
if (options?.keys) {
args.push(
@@ -491,6 +495,51 @@ export function transformCommandReply(
};
}
export enum RedisFunctionFlags {
NO_WRITES = 'no-writes',
ALLOW_OOM = 'allow-oom',
ALLOW_STALE = 'allow-stale',
NO_CLUSTER = 'no-cluster'
}
export type FunctionListRawItemReply = [
'library_name',
string,
'engine',
string,
'functions',
Array<[
'name',
string,
'description',
string | null,
'flags',
Array<RedisFunctionFlags>
]>
];
export interface FunctionListItemReply {
libraryName: string;
engine: string;
functions: Array<{
name: string;
description: string | null;
flags: Array<RedisFunctionFlags>;
}>;
}
export function transformFunctionListItemReply(reply: FunctionListRawItemReply): FunctionListItemReply {
return {
libraryName: reply[1],
engine: reply[3],
functions: reply[5].map(fn => ({
name: fn[1],
description: fn[3],
flags: fn[5]
}))
};
}
export interface SortOptions {
BY?: string;
LIMIT?: {