alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
425 lines • 13.5 kB
TypeScript
import { Alepha, Static } from "alepha";
import { RedisClientType, createClient } from "@redis/client";
//#region ../../src/redis/providers/RedisProvider.d.ts
/**
* Abstract Redis provider interface.
*
* This abstract class defines the common interface for Redis operations.
* Implementations include:
* - {@link NodeRedisProvider} - Uses `@redis/client` for Node.js runtime
* - {@link BunRedisProvider} - Uses Bun's native `RedisClient` for Bun runtime
*
* @example
* ```ts
* // Inject the abstract provider - runtime selects the implementation
* const redis = alepha.inject(RedisProvider);
*
* // Use common operations
* await redis.set("key", "value");
* const value = await redis.get("key");
* ```
*/
declare abstract class RedisProvider {
/**
* Whether the Redis client is ready to accept commands.
*/
abstract readonly isReady: boolean;
/**
* Connect to the Redis server.
*/
abstract connect(): Promise<void>;
/**
* Close the connection to the Redis server.
*/
abstract close(): Promise<void>;
/**
* Get the value of a key.
*
* @param key The key to get.
* @returns The value as a Buffer, or undefined if the key does not exist.
*/
abstract get(key: string): Promise<Buffer | undefined>;
/**
* Set the value of a key.
*
* @param key The key to set.
* @param value The value to set (Buffer or string).
* @param options Optional set options (EX, PX, NX, XX, etc.).
* @returns The value as a Buffer.
*/
abstract set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
/**
* Check if a key exists.
*
* @param key The key to check.
* @returns True if the key exists.
*/
abstract has(key: string): Promise<boolean>;
/**
* Get all keys matching a pattern.
*
* @param pattern The glob-style pattern to match.
* @returns Array of matching key names.
*/
abstract keys(pattern: string): Promise<string[]>;
/**
* Delete one or more keys.
*
* @param keys The keys to delete.
*/
abstract del(keys: string[]): Promise<void>;
/**
* Push a value to the left (head) of a list.
*
* @param key The list key.
* @param value The value to push.
*/
abstract lpush(key: string, value: string): Promise<void>;
/**
* Pop a value from the right (tail) of a list.
*
* @param key The list key.
* @returns The value, or undefined if the list is empty.
*/
abstract rpop(key: string): Promise<string | undefined>;
/**
* Publish a message to a channel.
*
* @param channel The channel name.
* @param message The message to publish.
*/
abstract publish(channel: string, message: string): Promise<void>;
/**
* Increment the integer value of a key by the given amount.
*
* If the key does not exist, it is set to 0 before performing the operation.
* This operation is atomic.
*
* @param key The key to increment.
* @param amount The amount to increment by.
* @returns The new value after incrementing.
*/
abstract incr(key: string, amount: number): Promise<number>;
}
/**
* Common Redis SET command options.
* Compatible with @redis/client SetOptions format.
*/
interface RedisSetOptions {
/**
* Set the specified expire time, in seconds.
*/
EX?: number;
/**
* Set the specified expire time, in milliseconds.
*/
PX?: number;
/**
* Set the specified Unix time at which the key will expire, in seconds.
*/
EXAT?: number;
/**
* Set the specified Unix time at which the key will expire, in milliseconds.
*/
PXAT?: number;
/**
* Only set the key if it does not already exist.
*/
NX?: boolean;
/**
* Only set the key if it already exists.
*/
XX?: boolean;
/**
* Retain the time to live associated with the key.
*/
KEEPTTL?: boolean;
/**
* Return the old string stored at key, or nil if key did not exist.
*/
GET?: boolean;
/**
* Alternative expiration format (compatible with @redis/client).
*/
expiration?: {
type: "EX" | "PX" | "EXAT" | "PXAT" | "KEEPTTL";
value: number;
};
/**
* Alternative condition format (compatible with @redis/client).
*/
condition?: "NX" | "XX";
}
//#endregion
//#region ../../src/redis/providers/BunRedisProvider.d.ts
declare const envSchema$1: import("zod").ZodObject<{
REDIS_URL: import("zod").ZodString;
}, import("zod/v4/core").$strip>;
declare module "alepha" {
interface Env extends Partial<Static<typeof envSchema$1>> {}
}
/**
* Bun Redis client provider using Bun's native Redis client.
*
* This provider uses Bun's built-in `RedisClient` class for Redis connections,
* which provides excellent performance (7.9x faster than ioredis) on the Bun runtime.
*
* @example
* ```ts
* // Set REDIS_URL environment variable (default: redis://localhost:6379)
* // REDIS_URL=redis://:password@myredis.example.com:6379
*
* // Or configure programmatically
* alepha.with({
* provide: RedisProvider,
* use: BunRedisProvider,
* });
* ```
*/
declare class BunRedisProvider extends RedisProvider {
protected readonly log: import("alepha/logger").Logger;
protected readonly alepha: Alepha;
protected readonly env: {
REDIS_URL: string;
};
protected client?: Bun.RedisClient;
get publisher(): Bun.RedisClient;
get isReady(): boolean;
protected readonly start: import("alepha").HookPrimitive<"start">;
protected readonly stop: import("alepha").HookPrimitive<"stop">;
/**
* Connect to the Redis server.
*/
connect(): Promise<void>;
/**
* Close the connection to the Redis server.
*/
close(): Promise<void>;
/**
* Create a duplicate connection for pub/sub or other isolated operations.
*/
duplicate(): Promise<Bun.RedisClient>;
get(key: string): Promise<Buffer | undefined>;
set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
has(key: string): Promise<boolean>;
keys(pattern: string): Promise<string[]>;
del(keys: string[]): Promise<void>;
lpush(key: string, value: string): Promise<void>;
rpop(key: string): Promise<string | undefined>;
publish(channel: string, message: string): Promise<void>;
incr(key: string, amount: number): Promise<number>;
/**
* Get the Redis connection URL.
*/
protected getUrl(): string;
}
//#endregion
//#region ../../src/redis/providers/RedisSubscriberProvider.d.ts
/**
* Abstract Redis subscriber provider interface.
*
* This abstract class defines the common interface for Redis pub/sub subscriptions.
* Implementations include:
* - {@link NodeRedisSubscriberProvider} - Uses `@redis/client` for Node.js runtime
* - {@link BunRedisSubscriberProvider} - Uses Bun's native `RedisClient` for Bun runtime
*
* Redis requires separate connections for pub/sub operations, so this provider
* creates a dedicated connection for subscriptions.
*
* @example
* ```ts
* // Inject the abstract provider - runtime selects the implementation
* const subscriber = alepha.inject(RedisSubscriberProvider);
*
* // Subscribe to a channel
* await subscriber.subscribe("my-channel", (message, channel) => {
* console.log(`Received: ${message} on ${channel}`);
* });
* ```
*/
declare abstract class RedisSubscriberProvider {
/**
* Whether the Redis subscriber client is ready to accept commands.
*/
abstract readonly isReady: boolean;
/**
* Connect to the Redis server for subscriptions.
*/
abstract connect(): Promise<void>;
/**
* Close the subscriber connection.
*/
abstract close(): Promise<void>;
/**
* Subscribe to a channel.
*
* @param channel The channel name.
* @param callback The callback to invoke when a message is received.
*/
abstract subscribe(channel: string, callback: SubscribeCallback): Promise<void>;
/**
* Unsubscribe from a channel.
*
* @param channel The channel name.
* @param callback Optional specific callback to remove.
*/
abstract unsubscribe(channel: string, callback?: SubscribeCallback): Promise<void>;
}
/**
* Callback for subscription messages.
*/
type SubscribeCallback = (message: string, channel: string) => void;
//#endregion
//#region ../../src/redis/providers/BunRedisSubscriberProvider.d.ts
/**
* Bun Redis subscriber provider for pub/sub operations.
*
* This provider creates a dedicated Redis connection for subscriptions,
* as Redis requires separate connections for pub/sub operations.
*
* @example
* ```ts
* const subscriber = alepha.inject(RedisSubscriberProvider);
* await subscriber.subscribe("channel", (message, channel) => {
* console.log(`Received: ${message} on ${channel}`);
* });
* ```
*/
declare class BunRedisSubscriberProvider extends RedisSubscriberProvider {
protected readonly log: import("alepha/logger").Logger;
protected readonly alepha: Alepha;
protected readonly redisProvider: BunRedisProvider;
protected client?: Bun.RedisClient;
get subscriber(): Bun.RedisClient;
get isReady(): boolean;
protected readonly start: import("alepha").HookPrimitive<"start">;
protected readonly stop: import("alepha").HookPrimitive<"stop">;
/**
* Connect to the Redis server for subscriptions.
*/
connect(): Promise<void>;
/**
* Close the subscriber connection.
*/
close(): Promise<void>;
subscribe(channel: string, callback: SubscribeCallback): Promise<void>;
unsubscribe(channel: string, _callback?: SubscribeCallback): Promise<void>;
}
//#endregion
//#region ../../src/redis/providers/NodeRedisProvider.d.ts
declare const envSchema: import("zod").ZodObject<{
REDIS_URL: import("zod").ZodString;
}, import("zod/v4/core").$strip>;
declare module "alepha" {
interface Env extends Partial<Static<typeof envSchema>> {}
}
type NodeRedisClient = RedisClientType<{}, {}, {}, 3, {
36: BufferConstructor;
}>;
type NodeRedisClientOptions = Parameters<typeof createClient>[0];
/**
* Node.js Redis client provider using `@redis/client`.
*
* This provider uses the official Redis client for Node.js runtime.
*
* @example
* ```ts
* // Set REDIS_URL environment variable (default: redis://localhost:6379)
* // REDIS_URL=redis://:password@myredis.example.com:6379
*
* // Or configure programmatically
* alepha.with({
* provide: RedisProvider,
* use: NodeRedisProvider,
* });
* ```
*/
declare class NodeRedisProvider extends RedisProvider {
protected readonly log: import("alepha/logger").Logger;
protected readonly alepha: Alepha;
protected readonly env: {
REDIS_URL: string;
};
protected readonly client: NodeRedisClient;
get publisher(): NodeRedisClient;
get isReady(): boolean;
protected readonly start: import("alepha").HookPrimitive<"start">;
protected readonly stop: import("alepha").HookPrimitive<"stop">;
/**
* Connect to the Redis server.
*/
connect(): Promise<void>;
/**
* Close the connection to the Redis server.
*/
close(): Promise<void>;
duplicate(options?: Partial<NodeRedisClientOptions>): NodeRedisClient;
get(key: string): Promise<Buffer | undefined>;
set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
has(key: string): Promise<boolean>;
keys(pattern: string): Promise<string[]>;
del(keys: string[]): Promise<void>;
lpush(key: string, value: string): Promise<void>;
rpop(key: string): Promise<string | undefined>;
publish(channel: string, message: string): Promise<void>;
incr(key: string, amount: number): Promise<number>;
/**
* Get the Redis connection URL.
*/
protected getUrl(): string;
/**
* Redis client factory method.
*/
protected createClient(): NodeRedisClient;
}
//#endregion
//#region ../../src/redis/providers/NodeRedisSubscriberProvider.d.ts
/**
* Node.js Redis subscriber provider using `@redis/client`.
*
* This provider creates a dedicated Redis connection for subscriptions,
* as Redis requires separate connections for pub/sub operations.
*
* @example
* ```ts
* const subscriber = alepha.inject(RedisSubscriberProvider);
* await subscriber.subscribe("channel", (message, channel) => {
* console.log(`Received: ${message} on ${channel}`);
* });
* ```
*/
declare class NodeRedisSubscriberProvider extends RedisSubscriberProvider {
protected readonly log: import("alepha/logger").Logger;
protected readonly alepha: Alepha;
protected readonly redisProvider: NodeRedisProvider;
protected readonly client: NodeRedisClient;
get subscriber(): NodeRedisClient;
get isReady(): boolean;
protected readonly start: import("alepha").HookPrimitive<"start">;
protected readonly stop: import("alepha").HookPrimitive<"stop">;
connect(): Promise<void>;
close(): Promise<void>;
subscribe(channel: string, callback: SubscribeCallback): Promise<void>;
unsubscribe(channel: string, callback?: SubscribeCallback): Promise<void>;
/**
* Redis subscriber client factory method.
*/
protected createClient(): NodeRedisClient;
}
//#endregion
//#region ../../src/redis/index.d.ts
/**
* Redis client wrapper.
*
* **Features:**
* - Connection pooling
* - Automatic reconnection
* - Command pipelining
* - Pub/sub support
*
* @module alepha.redis
*/
declare const AlephaRedis: import("alepha").Service<import("alepha").Module>;
//#endregion
export { AlephaRedis, BunRedisProvider, BunRedisSubscriberProvider, NodeRedisClient, NodeRedisClientOptions, NodeRedisProvider, NodeRedisSubscriberProvider, RedisProvider, RedisSetOptions, RedisSubscriberProvider, SubscribeCallback };
//# sourceMappingURL=index.d.ts.map