import { Cluster, Redis } from 'ioredis';
import { IRedisClient } from '../interfaces/redis-client';
/**
 * Augments an ioredis Redis / Cluster instance so that it conforms to
 * {@link IRedisClient}.
 *
 * Since ioredis already exposes every Redis command that BullMQ uses
 * (hgetall, zrange, xread, pipeline, multi, nodes, …), the adapter
 * only needs to:
 *
 *   - `runCommand`    – execute a previously defined Lua script by name
 *   - `duplicate`     – ensure the returned instance is also augmented
 *   - `pipeline/multi` – add `runCommand` to the returned ChainableCommander
 *   - translate structured option objects to ioredis varargs where needed
 *
 * **Side-effect warning:** This function mutates the provided instance
 * in-place for zero-overhead augmentation.  When a user passes their own
 * ioredis client to BullMQ, the overrides are written onto that shared
 * object.  All overrides are **backward-compatible**: they detect whether
 * they are called with the ioredis native varargs style or the IRedisClient
 * structured-options style and dispatch accordingly.  External code that
 * calls e.g. `client.hset(key, 'f1', 'v1')` will continue to work after
 * augmentation.
 */
export declare function createIORedisClient<TClient extends Redis | Cluster>(client: TClient): TClient & IRedisClient;
/**
 * Check if an object already implements {@link IRedisClient}.
 */
export declare function isIRedisClient(obj: any): obj is IRedisClient;
