bun-types
Version:
Type definitions and documentation for Bun, an incredibly fast JavaScript runtime
602 lines (523 loc) • 21.2 kB
TypeScript
declare module "bun" {
export interface RedisOptions {
/**
* Connection timeout in milliseconds
* @default 10000
*/
connectionTimeout?: number;
/**
* Idle timeout in milliseconds
* @default 0 (no timeout)
*/
idleTimeout?: number;
/**
* Whether to automatically reconnect
* @default true
*/
autoReconnect?: boolean;
/**
* Maximum number of reconnection attempts
* @default 10
*/
maxRetries?: number;
/**
* Whether to queue commands when disconnected
* @default true
*/
enableOfflineQueue?: boolean;
/**
* TLS options
* Can be a boolean or an object with TLS options
*/
tls?:
| boolean
| {
key?: string | Buffer;
cert?: string | Buffer;
ca?: string | Buffer | Array<string | Buffer>;
rejectUnauthorized?: boolean;
};
/**
* Whether to enable auto-pipelining
* @default true
*/
enableAutoPipelining?: boolean;
}
export namespace RedisClient {
type KeyLike = string | ArrayBufferView | Blob;
}
export class RedisClient {
/**
* Creates a new Redis client
* @param url URL to connect to, defaults to process.env.VALKEY_URL, process.env.REDIS_URL, or "valkey://localhost:6379"
* @param options Additional options
*
* @example
* ```ts
* const valkey = new RedisClient();
*
* await valkey.set("hello", "world");
*
* console.log(await valkey.get("hello"));
* ```
*/
constructor(url?: string, options?: RedisOptions);
/**
* Whether the client is connected to the Redis server
*/
readonly connected: boolean;
/**
* Amount of data buffered in bytes
*/
readonly bufferedAmount: number;
/**
* Callback fired when the client connects to the Redis server
*/
onconnect: ((this: RedisClient) => void) | null;
/**
* Callback fired when the client disconnects from the Redis server
* @param error The error that caused the disconnection
*/
onclose: ((this: RedisClient, error: Error) => void) | null;
/**
* Connect to the Redis server
* @returns A promise that resolves when connected
*/
connect(): Promise<void>;
/**
* Disconnect from the Redis server
*/
close(): void;
/**
* Send a raw command to the Redis server
* @param command The command to send
* @param args The arguments to the command
* @returns A promise that resolves with the command result
*/
send(command: string, args: string[]): Promise<any>;
/**
* Get the value of a key
* @param key The key to get
* @returns Promise that resolves with the key's value as a string, or null if the key doesn't exist
*/
get(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Get the value of a key as a Uint8Array
* @param key The key to get
* @returns Promise that resolves with the key's value as a Uint8Array, or null if the key doesn't exist
*/
getBuffer(key: RedisClient.KeyLike): Promise<Uint8Array<ArrayBuffer> | null>;
/**
* Set key to hold the string value
* @param key The key to set
* @param value The value to set
* @returns Promise that resolves with "OK" on success
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<"OK">;
/**
* Set key to hold the string value with expiration
* @param key The key to set
* @param value The value to set
* @param ex Set the specified expire time, in seconds
* @returns Promise that resolves with "OK" on success
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, ex: "EX", seconds: number): Promise<"OK">;
/**
* Set key to hold the string value with expiration
* @param key The key to set
* @param value The value to set
* @param px Set the specified expire time, in milliseconds
* @returns Promise that resolves with "OK" on success
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, px: "PX", milliseconds: number): Promise<"OK">;
/**
* Set key to hold the string value with expiration at a specific Unix timestamp
* @param key The key to set
* @param value The value to set
* @param exat Set the specified Unix time at which the key will expire, in seconds
* @returns Promise that resolves with "OK" on success
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, exat: "EXAT", timestampSeconds: number): Promise<"OK">;
/**
* Set key to hold the string value with expiration at a specific Unix timestamp
* @param key The key to set
* @param value The value to set
* @param pxat Set the specified Unix time at which the key will expire, in milliseconds
* @returns Promise that resolves with "OK" on success
*/
set(
key: RedisClient.KeyLike,
value: RedisClient.KeyLike,
pxat: "PXAT",
timestampMilliseconds: number,
): Promise<"OK">;
/**
* Set key to hold the string value only if key does not exist
* @param key The key to set
* @param value The value to set
* @param nx Only set the key if it does not already exist
* @returns Promise that resolves with "OK" on success, or null if the key already exists
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, nx: "NX"): Promise<"OK" | null>;
/**
* Set key to hold the string value only if key already exists
* @param key The key to set
* @param value The value to set
* @param xx Only set the key if it already exists
* @returns Promise that resolves with "OK" on success, or null if the key does not exist
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, xx: "XX"): Promise<"OK" | null>;
/**
* Set key to hold the string value and return the old value
* @param key The key to set
* @param value The value to set
* @param get Return the old string stored at key, or null if key did not exist
* @returns Promise that resolves with the old value, or null if key did not exist
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, get: "GET"): Promise<string | null>;
/**
* Set key to hold the string value and retain the time to live
* @param key The key to set
* @param value The value to set
* @param keepttl Retain the time to live associated with the key
* @returns Promise that resolves with "OK" on success
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, keepttl: "KEEPTTL"): Promise<"OK">;
/**
* Set key to hold the string value with various options
* @param key The key to set
* @param value The value to set
* @param options Array of options (EX, PX, EXAT, PXAT, NX, XX, KEEPTTL, GET)
* @returns Promise that resolves with "OK" on success, null if NX/XX condition not met, or the old value if GET is specified
*/
set(key: RedisClient.KeyLike, value: RedisClient.KeyLike, ...options: string[]): Promise<"OK" | string | null>;
/**
* Delete a key(s)
* @param keys The keys to delete
* @returns Promise that resolves with the number of keys removed
*/
del(...keys: RedisClient.KeyLike[]): Promise<number>;
/**
* Increment the integer value of a key by one
* @param key The key to increment
* @returns Promise that resolves with the new value
*/
incr(key: RedisClient.KeyLike): Promise<number>;
/**
* Decrement the integer value of a key by one
* @param key The key to decrement
* @returns Promise that resolves with the new value
*/
decr(key: RedisClient.KeyLike): Promise<number>;
/**
* Determine if a key exists
* @param key The key to check
* @returns Promise that resolves with true if the key exists, false otherwise
*/
exists(key: RedisClient.KeyLike): Promise<boolean>;
/**
* Set a key's time to live in seconds
* @param key The key to set the expiration for
* @param seconds The number of seconds until expiration
* @returns Promise that resolves with 1 if the timeout was set, 0 if not
*/
expire(key: RedisClient.KeyLike, seconds: number): Promise<number>;
/**
* Get the time to live for a key in seconds
* @param key The key to get the TTL for
* @returns Promise that resolves with the TTL, -1 if no expiry, or -2 if key doesn't exist
*/
ttl(key: RedisClient.KeyLike): Promise<number>;
/**
* Set multiple hash fields to multiple values
* @param key The hash key
* @param fieldValues An array of alternating field names and values
* @returns Promise that resolves with "OK" on success
*/
hmset(key: RedisClient.KeyLike, fieldValues: string[]): Promise<string>;
/**
* Get the values of all the given hash fields
* @param key The hash key
* @param fields The fields to get
* @returns Promise that resolves with an array of values
*/
hmget(key: RedisClient.KeyLike, fields: string[]): Promise<Array<string | null>>;
/**
* Check if a value is a member of a set
* @param key The set key
* @param member The member to check
* @returns Promise that resolves with true if the member exists, false otherwise
*/
sismember(key: RedisClient.KeyLike, member: string): Promise<boolean>;
/**
* Add a member to a set
* @param key The set key
* @param member The member to add
* @returns Promise that resolves with 1 if the member was added, 0 if it already existed
*/
sadd(key: RedisClient.KeyLike, member: string): Promise<number>;
/**
* Remove a member from a set
* @param key The set key
* @param member The member to remove
* @returns Promise that resolves with 1 if the member was removed, 0 if it didn't exist
*/
srem(key: RedisClient.KeyLike, member: string): Promise<number>;
/**
* Get all the members in a set
* @param key The set key
* @returns Promise that resolves with an array of all members
*/
smembers(key: RedisClient.KeyLike): Promise<string[]>;
/**
* Get a random member from a set
* @param key The set key
* @returns Promise that resolves with a random member, or null if the set is empty
*/
srandmember(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Remove and return a random member from a set
* @param key The set key
* @returns Promise that resolves with the removed member, or null if the set is empty
*/
spop(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Increment the integer value of a hash field by the given number
* @param key The hash key
* @param field The field to increment
* @param increment The amount to increment by
* @returns Promise that resolves with the new value
*/
hincrby(key: RedisClient.KeyLike, field: string, increment: string | number): Promise<number>;
/**
* Increment the float value of a hash field by the given amount
* @param key The hash key
* @param field The field to increment
* @param increment The amount to increment by
* @returns Promise that resolves with the new value as a string
*/
hincrbyfloat(key: RedisClient.KeyLike, field: string, increment: string | number): Promise<string>;
/**
* Get all the fields and values in a hash
* @param key The hash key
* @returns Promise that resolves with an object containing all fields and values
*/
hgetall(key: RedisClient.KeyLike): Promise<Record<string, string> | null>;
/**
* Get all field names in a hash
* @param key The hash key
* @returns Promise that resolves with an array of field names
*/
hkeys(key: RedisClient.KeyLike): Promise<string[]>;
/**
* Get the number of fields in a hash
* @param key The hash key
* @returns Promise that resolves with the number of fields
*/
hlen(key: RedisClient.KeyLike): Promise<number>;
/**
* Get all values in a hash
* @param key The hash key
* @returns Promise that resolves with an array of values
*/
hvals(key: RedisClient.KeyLike): Promise<string[]>;
/**
* Find all keys matching the given pattern
* @param pattern The pattern to match
* @returns Promise that resolves with an array of matching keys
*/
keys(pattern: string): Promise<string[]>;
/**
* Get the length of a list
* @param key The list key
* @returns Promise that resolves with the length of the list
*/
llen(key: RedisClient.KeyLike): Promise<number>;
/**
* Remove and get the first element in a list
* @param key The list key
* @returns Promise that resolves with the first element, or null if the list is empty
*/
lpop(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Remove the expiration from a key
* @param key The key to persist
* @returns Promise that resolves with 1 if the timeout was removed, 0 if the key doesn't exist or has no timeout
*/
persist(key: RedisClient.KeyLike): Promise<number>;
/**
* Get the expiration time of a key as a UNIX timestamp in milliseconds
* @param key The key to check
* @returns Promise that resolves with the timestamp, or -1 if the key has no expiration, or -2 if the key doesn't exist
*/
pexpiretime(key: RedisClient.KeyLike): Promise<number>;
/**
* Get the time to live for a key in milliseconds
* @param key The key to check
* @returns Promise that resolves with the TTL in milliseconds, or -1 if the key has no expiration, or -2 if the key doesn't exist
*/
pttl(key: RedisClient.KeyLike): Promise<number>;
/**
* Remove and get the last element in a list
* @param key The list key
* @returns Promise that resolves with the last element, or null if the list is empty
*/
rpop(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Get the number of members in a set
* @param key The set key
* @returns Promise that resolves with the cardinality (number of elements) of the set
*/
scard(key: RedisClient.KeyLike): Promise<number>;
/**
* Get the length of the value stored in a key
* @param key The key to check
* @returns Promise that resolves with the length of the string value, or 0 if the key doesn't exist
*/
strlen(key: RedisClient.KeyLike): Promise<number>;
/**
* Get the number of members in a sorted set
* @param key The sorted set key
* @returns Promise that resolves with the cardinality (number of elements) of the sorted set
*/
zcard(key: RedisClient.KeyLike): Promise<number>;
/**
* Remove and return members with the highest scores in a sorted set
* @param key The sorted set key
* @returns Promise that resolves with the removed member and its score, or null if the set is empty
*/
zpopmax(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Remove and return members with the lowest scores in a sorted set
* @param key The sorted set key
* @returns Promise that resolves with the removed member and its score, or null if the set is empty
*/
zpopmin(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Get one or multiple random members from a sorted set
* @param key The sorted set key
* @returns Promise that resolves with a random member, or null if the set is empty
*/
zrandmember(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Append a value to a key
* @param key The key to append to
* @param value The value to append
* @returns Promise that resolves with the length of the string after the append operation
*/
append(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<number>;
/**
* Set the value of a key and return its old value
* @param key The key to set
* @param value The value to set
* @returns Promise that resolves with the old value, or null if the key didn't exist
*/
getset(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<string | null>;
/**
* Prepend one or multiple values to a list
* @param key The list key
* @param value The value to prepend
* @returns Promise that resolves with the length of the list after the push operation
*/
lpush(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<number>;
/**
* Prepend a value to a list, only if the list exists
* @param key The list key
* @param value The value to prepend
* @returns Promise that resolves with the length of the list after the push operation, or 0 if the list doesn't exist
*/
lpushx(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<number>;
/**
* Add one or more members to a HyperLogLog
* @param key The HyperLogLog key
* @param element The element to add
* @returns Promise that resolves with 1 if the HyperLogLog was altered, 0 otherwise
*/
pfadd(key: RedisClient.KeyLike, element: string): Promise<number>;
/**
* Append one or multiple values to a list
* @param key The list key
* @param value The value to append
* @returns Promise that resolves with the length of the list after the push operation
*/
rpush(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<number>;
/**
* Append a value to a list, only if the list exists
* @param key The list key
* @param value The value to append
* @returns Promise that resolves with the length of the list after the push operation, or 0 if the list doesn't exist
*/
rpushx(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<number>;
/**
* Set the value of a key, only if the key does not exist
* @param key The key to set
* @param value The value to set
* @returns Promise that resolves with 1 if the key was set, 0 if the key was not set
*/
setnx(key: RedisClient.KeyLike, value: RedisClient.KeyLike): Promise<number>;
/**
* Get the score associated with the given member in a sorted set
* @param key The sorted set key
* @param member The member to get the score for
* @returns Promise that resolves with the score of the member as a string, or null if the member or key doesn't exist
*/
zscore(key: RedisClient.KeyLike, member: string): Promise<string | null>;
/**
* Get the values of all specified keys
* @param keys The keys to get
* @returns Promise that resolves with an array of values, with null for keys that don't exist
*/
mget(...keys: RedisClient.KeyLike[]): Promise<(string | null)[]>;
/**
* Count the number of set bits (population counting) in a string
* @param key The key to count bits in
* @returns Promise that resolves with the number of bits set to 1
*/
bitcount(key: RedisClient.KeyLike): Promise<number>;
/**
* Return a serialized version of the value stored at the specified key
* @param key The key to dump
* @returns Promise that resolves with the serialized value, or null if the key doesn't exist
*/
dump(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Get the expiration time of a key as a UNIX timestamp in seconds
* @param key The key to check
* @returns Promise that resolves with the timestamp, or -1 if the key has no expiration, or -2 if the key doesn't exist
*/
expiretime(key: RedisClient.KeyLike): Promise<number>;
/**
* Get the value of a key and delete the key
* @param key The key to get and delete
* @returns Promise that resolves with the value of the key, or null if the key doesn't exist
*/
getdel(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Get the value of a key and optionally set its expiration
* @param key The key to get
* @returns Promise that resolves with the value of the key, or null if the key doesn't exist
*/
getex(key: RedisClient.KeyLike): Promise<string | null>;
/**
* Ping the server
* @returns Promise that resolves with "PONG" if the server is reachable, or throws an error if the server is not reachable
*/
ping(): Promise<"PONG">;
/**
* Ping the server with a message
* @param message The message to send to the server
* @returns Promise that resolves with the message if the server is reachable, or throws an error if the server is not reachable
*/
ping(message: RedisClient.KeyLike): Promise<string>;
}
/**
* Default Redis client
*
* Connection information populated from one of, in order of preference:
* - `process.env.VALKEY_URL`
* - `process.env.REDIS_URL`
* - `"valkey://localhost:6379"`
*
*/
export const redis: RedisClient;
}