index.d.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /// <reference types="node" />
  2. import { ClientCommandOptions } from '../client';
  3. import { CommandOptions } from '../command-options';
  4. import { RedisScriptConfig, SHA1 } from '../lua-script';
  5. export type RedisCommandRawReply = string | number | Buffer | null | undefined | Array<RedisCommandRawReply>;
  6. export type RedisCommandArgument = string | Buffer;
  7. export type RedisCommandArguments = Array<RedisCommandArgument> & {
  8. preserve?: unknown;
  9. };
  10. export interface RedisCommand {
  11. FIRST_KEY_INDEX?: number | ((...args: Array<any>) => RedisCommandArgument | undefined);
  12. IS_READ_ONLY?: boolean;
  13. TRANSFORM_LEGACY_REPLY?: boolean;
  14. transformArguments(this: void, ...args: Array<any>): RedisCommandArguments;
  15. transformReply?(this: void, reply: any, preserved?: any): any;
  16. }
  17. export type RedisCommandReply<C extends RedisCommand> = C['transformReply'] extends (...args: any) => infer T ? T : RedisCommandRawReply;
  18. export type ConvertArgumentType<Type, ToType> = Type extends RedisCommandArgument ? (Type extends (string & ToType) ? Type : ToType) : (Type extends Set<infer Member> ? Set<ConvertArgumentType<Member, ToType>> : (Type extends Map<infer Key, infer Value> ? Map<Key, ConvertArgumentType<Value, ToType>> : (Type extends Array<infer Member> ? Array<ConvertArgumentType<Member, ToType>> : (Type extends Date ? Type : (Type extends Record<PropertyKey, any> ? {
  19. [Property in keyof Type]: ConvertArgumentType<Type[Property], ToType>;
  20. } : Type)))));
  21. export type RedisCommandSignature<Command extends RedisCommand, Params extends Array<unknown> = Parameters<Command['transformArguments']>> = <Options extends CommandOptions<ClientCommandOptions>>(...args: Params | [options: Options, ...rest: Params]) => Promise<ConvertArgumentType<RedisCommandReply<Command>, Options['returnBuffers'] extends true ? Buffer : string>>;
  22. export interface RedisCommands {
  23. [command: string]: RedisCommand;
  24. }
  25. export interface RedisModule {
  26. [command: string]: RedisCommand;
  27. }
  28. export interface RedisModules {
  29. [module: string]: RedisModule;
  30. }
  31. export interface RedisFunction extends RedisCommand {
  32. NUMBER_OF_KEYS?: number;
  33. }
  34. export interface RedisFunctionLibrary {
  35. [fn: string]: RedisFunction;
  36. }
  37. export interface RedisFunctions {
  38. [library: string]: RedisFunctionLibrary;
  39. }
  40. export type RedisScript = RedisScriptConfig & SHA1;
  41. export interface RedisScripts {
  42. [script: string]: RedisScript;
  43. }
  44. export interface RedisExtensions<M extends RedisModules = RedisModules, F extends RedisFunctions = RedisFunctions, S extends RedisScripts = RedisScripts> {
  45. modules?: M;
  46. functions?: F;
  47. scripts?: S;
  48. }
  49. export type ExcludeMappedString<S> = string extends S ? never : S;