alepha 0.14.0 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/api/audits/index.d.ts +80 -1
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +80 -1
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +236 -157
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/notifications/index.d.ts +21 -1
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/parameters/index.d.ts +451 -4
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.d.ts +252 -249
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +4 -0
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +128 -128
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cli/index.d.ts +304 -115
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +650 -531
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +210 -13
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +306 -69
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -6
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +7 -6
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.js.map +1 -1
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/redis/index.js.map +1 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.browser.js +26 -5
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.d.ts +294 -215
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +522 -523
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/redis/index.js +2 -4
- package/dist/queue/redis/index.js.map +1 -1
- package/dist/redis/index.d.ts +400 -29
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +412 -21
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.js.map +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +155 -155
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/cookies/index.browser.js.map +1 -1
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +0 -1
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/helmet/index.d.ts +4 -1
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/helmet/index.js.map +1 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/multipart/index.js.map +1 -1
- package/dist/server/proxy/index.js.map +1 -1
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/security/index.d.ts +9 -9
- package/dist/server/security/index.js.map +1 -1
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.js.map +1 -1
- package/dist/topic/redis/index.js +3 -3
- package/dist/topic/redis/index.js.map +1 -1
- package/dist/vite/index.js +9 -6
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +7 -7
- package/dist/websocket/index.js.map +1 -1
- package/package.json +3 -3
- package/src/api/users/index.ts +4 -0
- package/src/cli/apps/AlephaCli.ts +36 -14
- package/src/cli/apps/AlephaPackageBuilderCli.ts +5 -1
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/atoms/changelogOptions.ts +45 -0
- package/src/cli/commands/{ViteCommands.ts → build.ts} +4 -93
- package/src/cli/commands/changelog.ts +244 -0
- package/src/cli/commands/clean.ts +14 -0
- package/src/cli/commands/{DrizzleCommands.ts → db.ts} +37 -124
- package/src/cli/commands/deploy.ts +118 -0
- package/src/cli/commands/dev.ts +57 -0
- package/src/cli/commands/format.ts +17 -0
- package/src/cli/commands/{CoreCommands.ts → init.ts} +2 -40
- package/src/cli/commands/lint.ts +17 -0
- package/src/cli/commands/root.ts +32 -0
- package/src/cli/commands/run.ts +24 -0
- package/src/cli/commands/test.ts +42 -0
- package/src/cli/commands/typecheck.ts +19 -0
- package/src/cli/commands/{VerifyCommands.ts → verify.ts} +1 -13
- package/src/cli/defineConfig.ts +24 -0
- package/src/cli/index.ts +17 -5
- package/src/cli/services/AlephaCliUtils.ts +4 -21
- package/src/cli/services/GitMessageParser.ts +77 -0
- package/src/command/helpers/EnvUtils.ts +37 -0
- package/src/command/index.ts +3 -1
- package/src/command/primitives/$command.ts +172 -6
- package/src/command/providers/CliProvider.ts +424 -91
- package/src/core/Alepha.ts +8 -5
- package/src/file/providers/NodeFileSystemProvider.ts +3 -1
- package/src/orm/index.browser.ts +1 -1
- package/src/orm/index.ts +18 -10
- package/src/orm/interfaces/PgQueryWhere.ts +1 -26
- package/src/orm/providers/{PostgresTypeProvider.ts → DatabaseTypeProvider.ts} +25 -3
- package/src/orm/providers/drivers/BunPostgresProvider.ts +225 -0
- package/src/orm/providers/drivers/BunSqliteProvider.ts +180 -0
- package/src/orm/providers/drivers/DatabaseProvider.ts +25 -0
- package/src/orm/providers/drivers/NodePostgresProvider.ts +0 -25
- package/src/orm/services/QueryManager.ts +10 -125
- package/src/queue/redis/providers/RedisQueueProvider.ts +2 -7
- package/src/redis/index.ts +65 -3
- package/src/redis/providers/BunRedisProvider.ts +304 -0
- package/src/redis/providers/BunRedisSubscriberProvider.ts +94 -0
- package/src/redis/providers/NodeRedisProvider.ts +280 -0
- package/src/redis/providers/NodeRedisSubscriberProvider.ts +94 -0
- package/src/redis/providers/RedisProvider.ts +134 -140
- package/src/redis/providers/RedisSubscriberProvider.ts +58 -49
- package/src/server/core/providers/BunHttpServerProvider.ts +0 -3
- package/src/server/core/providers/ServerBodyParserProvider.ts +3 -1
- package/src/server/core/providers/ServerProvider.ts +7 -4
- package/src/server/multipart/providers/ServerMultipartProvider.ts +3 -1
- package/src/server/proxy/providers/ServerProxyProvider.ts +1 -1
- package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
- package/src/vite/tasks/buildServer.ts +1 -0
- package/src/cli/commands/BiomeCommands.ts +0 -29
- package/src/cli/commands/ChangelogCommands.ts +0 -389
- package/src/orm/services/PgJsonQueryManager.ts +0 -511
|
@@ -11,12 +11,10 @@ var RedisQueueProvider = class {
|
|
|
11
11
|
return `${this.env.REDIS_QUEUE_PREFIX}:${queue}`;
|
|
12
12
|
}
|
|
13
13
|
async push(queue, message) {
|
|
14
|
-
await this.redisProvider.
|
|
14
|
+
await this.redisProvider.lpush(this.prefix(queue), message);
|
|
15
15
|
}
|
|
16
16
|
async pop(queue) {
|
|
17
|
-
|
|
18
|
-
if (value == null) return;
|
|
19
|
-
return String(value);
|
|
17
|
+
return this.redisProvider.rpop(this.prefix(queue));
|
|
20
18
|
}
|
|
21
19
|
};
|
|
22
20
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"sourcesContent":["import { $env, $inject, type Static, t } from \"alepha\";\nimport type { QueueProvider } from \"alepha/queue\";\nimport { RedisProvider } from \"alepha/redis\";\n\nconst envSchema = t.object({\n REDIS_QUEUE_PREFIX: t.text({\n default: \"queue\",\n }),\n});\n\nexport class RedisQueueProvider implements QueueProvider {\n protected readonly env: Static<typeof envSchema> = $env(envSchema);\n protected readonly redisProvider: RedisProvider = $inject(RedisProvider);\n\n public prefix(queue: string): string {\n return `${this.env.REDIS_QUEUE_PREFIX}:${queue}`;\n }\n\n public async push(queue: string, message: string): Promise<void> {\n await this.redisProvider.
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"sourcesContent":["import { $env, $inject, type Static, t } from \"alepha\";\nimport type { QueueProvider } from \"alepha/queue\";\nimport { RedisProvider } from \"alepha/redis\";\n\nconst envSchema = t.object({\n REDIS_QUEUE_PREFIX: t.text({\n default: \"queue\",\n }),\n});\n\nexport class RedisQueueProvider implements QueueProvider {\n protected readonly env: Static<typeof envSchema> = $env(envSchema);\n protected readonly redisProvider: RedisProvider = $inject(RedisProvider);\n\n public prefix(queue: string): string {\n return `${this.env.REDIS_QUEUE_PREFIX}:${queue}`;\n }\n\n public async push(queue: string, message: string): Promise<void> {\n await this.redisProvider.lpush(this.prefix(queue), message);\n }\n\n public async pop(queue: string): Promise<string | undefined> {\n return this.redisProvider.rpop(this.prefix(queue));\n }\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { AlephaQueue, QueueProvider } from \"alepha/queue\";\nimport { RedisQueueProvider } from \"./providers/RedisQueueProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/RedisQueueProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Plugin for Alepha Queue that provides Redis queue capabilities.\n *\n * @see {@link RedisQueueProvider}\n * @module alepha.queue.redis\n */\nexport const AlephaQueueRedis = $module({\n name: \"alepha.queue.redis\",\n services: [RedisQueueProvider],\n register: (alepha: Alepha) =>\n alepha\n .with({\n optional: true,\n provide: QueueProvider,\n use: RedisQueueProvider,\n })\n .with(AlephaQueue),\n});\n"],"mappings":";;;;;AAIA,MAAM,YAAY,EAAE,OAAO,EACzB,oBAAoB,EAAE,KAAK,EACzB,SAAS,SACV,CAAC,EACH,CAAC;AAEF,IAAa,qBAAb,MAAyD;CACvD,AAAmB,MAAgC,KAAK,UAAU;CAClE,AAAmB,gBAA+B,QAAQ,cAAc;CAExE,AAAO,OAAO,OAAuB;AACnC,SAAO,GAAG,KAAK,IAAI,mBAAmB,GAAG;;CAG3C,MAAa,KAAK,OAAe,SAAgC;AAC/D,QAAM,KAAK,cAAc,MAAM,KAAK,OAAO,MAAM,EAAE,QAAQ;;CAG7D,MAAa,IAAI,OAA4C;AAC3D,SAAO,KAAK,cAAc,KAAK,KAAK,OAAO,MAAM,CAAC;;;;;;;;;;;;ACPtD,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,UAAU,CAAC,mBAAmB;CAC9B,WAAW,WACT,OACG,KAAK;EACJ,UAAU;EACV,SAAS;EACT,KAAK;EACN,CAAC,CACD,KAAK,YAAY;CACvB,CAAC"}
|
package/dist/redis/index.d.ts
CHANGED
|
@@ -1,37 +1,194 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as alepha1 from "alepha";
|
|
2
2
|
import { Alepha, Static } from "alepha";
|
|
3
|
-
import { RedisClientType, SetOptions, createClient } from "@redis/client";
|
|
4
3
|
import * as alepha_logger0 from "alepha/logger";
|
|
4
|
+
import { RedisClientType, createClient } from "@redis/client";
|
|
5
|
+
import { RedisClient } from "bun";
|
|
5
6
|
|
|
6
7
|
//#region ../../src/redis/providers/RedisProvider.d.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Abstract Redis provider interface.
|
|
11
|
+
*
|
|
12
|
+
* This abstract class defines the common interface for Redis operations.
|
|
13
|
+
* Implementations include:
|
|
14
|
+
* - {@link NodeRedisProvider} - Uses `@redis/client` for Node.js runtime
|
|
15
|
+
* - {@link BunRedisProvider} - Uses Bun's native `RedisClient` for Bun runtime
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // Inject the abstract provider - runtime selects the implementation
|
|
20
|
+
* const redis = alepha.inject(RedisProvider);
|
|
21
|
+
*
|
|
22
|
+
* // Use common operations
|
|
23
|
+
* await redis.set("key", "value");
|
|
24
|
+
* const value = await redis.get("key");
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
declare abstract class RedisProvider {
|
|
28
|
+
/**
|
|
29
|
+
* Whether the Redis client is ready to accept commands.
|
|
30
|
+
*/
|
|
31
|
+
abstract readonly isReady: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Connect to the Redis server.
|
|
34
|
+
*/
|
|
35
|
+
abstract connect(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Close the connection to the Redis server.
|
|
38
|
+
*/
|
|
39
|
+
abstract close(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Get the value of a key.
|
|
42
|
+
*
|
|
43
|
+
* @param key The key to get.
|
|
44
|
+
* @returns The value as a Buffer, or undefined if the key does not exist.
|
|
45
|
+
*/
|
|
46
|
+
abstract get(key: string): Promise<Buffer | undefined>;
|
|
47
|
+
/**
|
|
48
|
+
* Set the value of a key.
|
|
49
|
+
*
|
|
50
|
+
* @param key The key to set.
|
|
51
|
+
* @param value The value to set (Buffer or string).
|
|
52
|
+
* @param options Optional set options (EX, PX, NX, XX, etc.).
|
|
53
|
+
* @returns The value as a Buffer.
|
|
54
|
+
*/
|
|
55
|
+
abstract set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
|
|
56
|
+
/**
|
|
57
|
+
* Check if a key exists.
|
|
58
|
+
*
|
|
59
|
+
* @param key The key to check.
|
|
60
|
+
* @returns True if the key exists.
|
|
61
|
+
*/
|
|
62
|
+
abstract has(key: string): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Get all keys matching a pattern.
|
|
65
|
+
*
|
|
66
|
+
* @param pattern The glob-style pattern to match.
|
|
67
|
+
* @returns Array of matching key names.
|
|
68
|
+
*/
|
|
69
|
+
abstract keys(pattern: string): Promise<string[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Delete one or more keys.
|
|
72
|
+
*
|
|
73
|
+
* @param keys The keys to delete.
|
|
74
|
+
*/
|
|
75
|
+
abstract del(keys: string[]): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Push a value to the left (head) of a list.
|
|
78
|
+
*
|
|
79
|
+
* @param key The list key.
|
|
80
|
+
* @param value The value to push.
|
|
81
|
+
*/
|
|
82
|
+
abstract lpush(key: string, value: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Pop a value from the right (tail) of a list.
|
|
85
|
+
*
|
|
86
|
+
* @param key The list key.
|
|
87
|
+
* @returns The value, or undefined if the list is empty.
|
|
88
|
+
*/
|
|
89
|
+
abstract rpop(key: string): Promise<string | undefined>;
|
|
90
|
+
/**
|
|
91
|
+
* Publish a message to a channel.
|
|
92
|
+
*
|
|
93
|
+
* @param channel The channel name.
|
|
94
|
+
* @param message The message to publish.
|
|
95
|
+
*/
|
|
96
|
+
abstract publish(channel: string, message: string): Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Common Redis SET command options.
|
|
100
|
+
* Compatible with @redis/client SetOptions format.
|
|
101
|
+
*/
|
|
102
|
+
interface RedisSetOptions {
|
|
103
|
+
/**
|
|
104
|
+
* Set the specified expire time, in seconds.
|
|
105
|
+
*/
|
|
106
|
+
EX?: number;
|
|
107
|
+
/**
|
|
108
|
+
* Set the specified expire time, in milliseconds.
|
|
109
|
+
*/
|
|
110
|
+
PX?: number;
|
|
111
|
+
/**
|
|
112
|
+
* Set the specified Unix time at which the key will expire, in seconds.
|
|
113
|
+
*/
|
|
114
|
+
EXAT?: number;
|
|
115
|
+
/**
|
|
116
|
+
* Set the specified Unix time at which the key will expire, in milliseconds.
|
|
117
|
+
*/
|
|
118
|
+
PXAT?: number;
|
|
119
|
+
/**
|
|
120
|
+
* Only set the key if it does not already exist.
|
|
121
|
+
*/
|
|
122
|
+
NX?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Only set the key if it already exists.
|
|
125
|
+
*/
|
|
126
|
+
XX?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Retain the time to live associated with the key.
|
|
129
|
+
*/
|
|
130
|
+
KEEPTTL?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Return the old string stored at key, or nil if key did not exist.
|
|
133
|
+
*/
|
|
134
|
+
GET?: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Alternative expiration format (compatible with @redis/client).
|
|
137
|
+
*/
|
|
138
|
+
expiration?: {
|
|
139
|
+
type: "EX" | "PX" | "EXAT" | "PXAT" | "KEEPTTL";
|
|
140
|
+
value: number;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Alternative condition format (compatible with @redis/client).
|
|
144
|
+
*/
|
|
145
|
+
condition?: "NX" | "XX";
|
|
146
|
+
}
|
|
147
|
+
//#endregion
|
|
148
|
+
//#region ../../src/redis/providers/BunRedisProvider.d.ts
|
|
149
|
+
declare const envSchema$1: alepha1.TObject<{
|
|
150
|
+
REDIS_URL: alepha1.TOptional<alepha1.TString>;
|
|
151
|
+
REDIS_PORT: alepha1.TInteger;
|
|
152
|
+
REDIS_HOST: alepha1.TString;
|
|
153
|
+
REDIS_PASSWORD: alepha1.TOptional<alepha1.TString>;
|
|
11
154
|
}>;
|
|
12
155
|
declare module "alepha" {
|
|
13
|
-
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
156
|
+
interface Env extends Partial<Static<typeof envSchema$1>> {}
|
|
14
157
|
}
|
|
15
|
-
type RedisClient = RedisClientType<{}, {}, {}, 3, {
|
|
16
|
-
36: BufferConstructor;
|
|
17
|
-
}>;
|
|
18
|
-
type RedisClientOptions = Parameters<typeof createClient>[0];
|
|
19
|
-
type RedisSetOptions = SetOptions;
|
|
20
158
|
/**
|
|
21
|
-
* Redis client provider.
|
|
159
|
+
* Bun Redis client provider using Bun's native Redis client.
|
|
160
|
+
*
|
|
161
|
+
* This provider uses Bun's built-in `RedisClient` class for Redis connections,
|
|
162
|
+
* which provides excellent performance (7.9x faster than ioredis) on the Bun runtime.
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```ts
|
|
166
|
+
* // Set REDIS_URL environment variable
|
|
167
|
+
* // REDIS_URL=redis://localhost:6379
|
|
168
|
+
*
|
|
169
|
+
* // Or configure via REDIS_HOST, REDIS_PORT, REDIS_PASSWORD
|
|
170
|
+
*
|
|
171
|
+
* // Or configure programmatically
|
|
172
|
+
* alepha.with({
|
|
173
|
+
* provide: RedisProvider,
|
|
174
|
+
* use: BunRedisProvider,
|
|
175
|
+
* });
|
|
176
|
+
* ```
|
|
22
177
|
*/
|
|
23
|
-
declare class RedisProvider {
|
|
178
|
+
declare class BunRedisProvider extends RedisProvider {
|
|
24
179
|
protected readonly log: alepha_logger0.Logger;
|
|
25
180
|
protected readonly alepha: Alepha;
|
|
26
181
|
protected readonly env: {
|
|
182
|
+
REDIS_URL?: string | undefined;
|
|
27
183
|
REDIS_PASSWORD?: string | undefined;
|
|
28
184
|
REDIS_PORT: number;
|
|
29
185
|
REDIS_HOST: string;
|
|
30
186
|
};
|
|
31
|
-
protected
|
|
187
|
+
protected client?: RedisClient;
|
|
32
188
|
get publisher(): RedisClient;
|
|
33
|
-
|
|
34
|
-
protected readonly
|
|
189
|
+
get isReady(): boolean;
|
|
190
|
+
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
191
|
+
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
35
192
|
/**
|
|
36
193
|
* Connect to the Redis server.
|
|
37
194
|
*/
|
|
@@ -40,43 +197,257 @@ declare class RedisProvider {
|
|
|
40
197
|
* Close the connection to the Redis server.
|
|
41
198
|
*/
|
|
42
199
|
close(): Promise<void>;
|
|
43
|
-
|
|
200
|
+
/**
|
|
201
|
+
* Create a duplicate connection for pub/sub or other isolated operations.
|
|
202
|
+
*/
|
|
203
|
+
duplicate(): Promise<RedisClient>;
|
|
44
204
|
get(key: string): Promise<Buffer | undefined>;
|
|
45
205
|
set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
|
|
46
206
|
has(key: string): Promise<boolean>;
|
|
47
207
|
keys(pattern: string): Promise<string[]>;
|
|
48
208
|
del(keys: string[]): Promise<void>;
|
|
209
|
+
lpush(key: string, value: string): Promise<void>;
|
|
210
|
+
rpop(key: string): Promise<string | undefined>;
|
|
211
|
+
publish(channel: string, message: string): Promise<void>;
|
|
49
212
|
/**
|
|
50
|
-
*
|
|
213
|
+
* Get the Redis connection URL.
|
|
51
214
|
*/
|
|
52
|
-
protected
|
|
215
|
+
protected getUrl(): string;
|
|
53
216
|
}
|
|
54
217
|
//#endregion
|
|
55
218
|
//#region ../../src/redis/providers/RedisSubscriberProvider.d.ts
|
|
56
|
-
|
|
219
|
+
/**
|
|
220
|
+
* Abstract Redis subscriber provider interface.
|
|
221
|
+
*
|
|
222
|
+
* This abstract class defines the common interface for Redis pub/sub subscriptions.
|
|
223
|
+
* Implementations include:
|
|
224
|
+
* - {@link NodeRedisSubscriberProvider} - Uses `@redis/client` for Node.js runtime
|
|
225
|
+
* - {@link BunRedisSubscriberProvider} - Uses Bun's native `RedisClient` for Bun runtime
|
|
226
|
+
*
|
|
227
|
+
* Redis requires separate connections for pub/sub operations, so this provider
|
|
228
|
+
* creates a dedicated connection for subscriptions.
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```ts
|
|
232
|
+
* // Inject the abstract provider - runtime selects the implementation
|
|
233
|
+
* const subscriber = alepha.inject(RedisSubscriberProvider);
|
|
234
|
+
*
|
|
235
|
+
* // Subscribe to a channel
|
|
236
|
+
* await subscriber.subscribe("my-channel", (message, channel) => {
|
|
237
|
+
* console.log(`Received: ${message} on ${channel}`);
|
|
238
|
+
* });
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
declare abstract class RedisSubscriberProvider {
|
|
242
|
+
/**
|
|
243
|
+
* Whether the Redis subscriber client is ready to accept commands.
|
|
244
|
+
*/
|
|
245
|
+
abstract readonly isReady: boolean;
|
|
246
|
+
/**
|
|
247
|
+
* Connect to the Redis server for subscriptions.
|
|
248
|
+
*/
|
|
249
|
+
abstract connect(): Promise<void>;
|
|
250
|
+
/**
|
|
251
|
+
* Close the subscriber connection.
|
|
252
|
+
*/
|
|
253
|
+
abstract close(): Promise<void>;
|
|
254
|
+
/**
|
|
255
|
+
* Subscribe to a channel.
|
|
256
|
+
*
|
|
257
|
+
* @param channel The channel name.
|
|
258
|
+
* @param callback The callback to invoke when a message is received.
|
|
259
|
+
*/
|
|
260
|
+
abstract subscribe(channel: string, callback: SubscribeCallback): Promise<void>;
|
|
261
|
+
/**
|
|
262
|
+
* Unsubscribe from a channel.
|
|
263
|
+
*
|
|
264
|
+
* @param channel The channel name.
|
|
265
|
+
* @param callback Optional specific callback to remove.
|
|
266
|
+
*/
|
|
267
|
+
abstract unsubscribe(channel: string, callback?: SubscribeCallback): Promise<void>;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Callback for subscription messages.
|
|
271
|
+
*/
|
|
272
|
+
type SubscribeCallback = (message: string, channel: string) => void;
|
|
273
|
+
//#endregion
|
|
274
|
+
//#region ../../src/redis/providers/BunRedisSubscriberProvider.d.ts
|
|
275
|
+
/**
|
|
276
|
+
* Bun Redis subscriber provider for pub/sub operations.
|
|
277
|
+
*
|
|
278
|
+
* This provider creates a dedicated Redis connection for subscriptions,
|
|
279
|
+
* as Redis requires separate connections for pub/sub operations.
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```ts
|
|
283
|
+
* const subscriber = alepha.inject(RedisSubscriberProvider);
|
|
284
|
+
* await subscriber.subscribe("channel", (message, channel) => {
|
|
285
|
+
* console.log(`Received: ${message} on ${channel}`);
|
|
286
|
+
* });
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
declare class BunRedisSubscriberProvider extends RedisSubscriberProvider {
|
|
57
290
|
protected readonly log: alepha_logger0.Logger;
|
|
58
291
|
protected readonly alepha: Alepha;
|
|
59
|
-
protected readonly redisProvider:
|
|
60
|
-
protected
|
|
292
|
+
protected readonly redisProvider: BunRedisProvider;
|
|
293
|
+
protected client?: RedisClient;
|
|
61
294
|
get subscriber(): RedisClient;
|
|
62
|
-
|
|
63
|
-
protected readonly
|
|
295
|
+
get isReady(): boolean;
|
|
296
|
+
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
297
|
+
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
298
|
+
/**
|
|
299
|
+
* Connect to the Redis server for subscriptions.
|
|
300
|
+
*/
|
|
64
301
|
connect(): Promise<void>;
|
|
302
|
+
/**
|
|
303
|
+
* Close the subscriber connection.
|
|
304
|
+
*/
|
|
65
305
|
close(): Promise<void>;
|
|
306
|
+
subscribe(channel: string, callback: SubscribeCallback): Promise<void>;
|
|
307
|
+
unsubscribe(channel: string, _callback?: SubscribeCallback): Promise<void>;
|
|
308
|
+
}
|
|
309
|
+
//#endregion
|
|
310
|
+
//#region ../../src/redis/providers/NodeRedisProvider.d.ts
|
|
311
|
+
declare const envSchema: alepha1.TObject<{
|
|
312
|
+
REDIS_URL: alepha1.TOptional<alepha1.TString>;
|
|
313
|
+
REDIS_PORT: alepha1.TInteger;
|
|
314
|
+
REDIS_HOST: alepha1.TString;
|
|
315
|
+
REDIS_PASSWORD: alepha1.TOptional<alepha1.TString>;
|
|
316
|
+
}>;
|
|
317
|
+
declare module "alepha" {
|
|
318
|
+
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
319
|
+
}
|
|
320
|
+
type NodeRedisClient = RedisClientType<{}, {}, {}, 3, {
|
|
321
|
+
36: BufferConstructor;
|
|
322
|
+
}>;
|
|
323
|
+
type NodeRedisClientOptions = Parameters<typeof createClient>[0];
|
|
324
|
+
/**
|
|
325
|
+
* Node.js Redis client provider using `@redis/client`.
|
|
326
|
+
*
|
|
327
|
+
* This provider uses the official Redis client for Node.js runtime.
|
|
328
|
+
*
|
|
329
|
+
* @example
|
|
330
|
+
* ```ts
|
|
331
|
+
* // Set REDIS_URL environment variable
|
|
332
|
+
* // REDIS_URL=redis://localhost:6379
|
|
333
|
+
*
|
|
334
|
+
* // Or configure via REDIS_HOST, REDIS_PORT, REDIS_PASSWORD
|
|
335
|
+
*
|
|
336
|
+
* // Or configure programmatically
|
|
337
|
+
* alepha.with({
|
|
338
|
+
* provide: RedisProvider,
|
|
339
|
+
* use: NodeRedisProvider,
|
|
340
|
+
* });
|
|
341
|
+
* ```
|
|
342
|
+
*/
|
|
343
|
+
declare class NodeRedisProvider extends RedisProvider {
|
|
344
|
+
protected readonly log: alepha_logger0.Logger;
|
|
345
|
+
protected readonly alepha: Alepha;
|
|
346
|
+
protected readonly env: {
|
|
347
|
+
REDIS_URL?: string | undefined;
|
|
348
|
+
REDIS_PASSWORD?: string | undefined;
|
|
349
|
+
REDIS_PORT: number;
|
|
350
|
+
REDIS_HOST: string;
|
|
351
|
+
};
|
|
352
|
+
protected readonly client: NodeRedisClient;
|
|
353
|
+
get publisher(): NodeRedisClient;
|
|
354
|
+
get isReady(): boolean;
|
|
355
|
+
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
356
|
+
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
357
|
+
/**
|
|
358
|
+
* Connect to the Redis server.
|
|
359
|
+
*/
|
|
360
|
+
connect(): Promise<void>;
|
|
361
|
+
/**
|
|
362
|
+
* Close the connection to the Redis server.
|
|
363
|
+
*/
|
|
364
|
+
close(): Promise<void>;
|
|
365
|
+
duplicate(options?: Partial<NodeRedisClientOptions>): NodeRedisClient;
|
|
366
|
+
get(key: string): Promise<Buffer | undefined>;
|
|
367
|
+
set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
|
|
368
|
+
has(key: string): Promise<boolean>;
|
|
369
|
+
keys(pattern: string): Promise<string[]>;
|
|
370
|
+
del(keys: string[]): Promise<void>;
|
|
371
|
+
lpush(key: string, value: string): Promise<void>;
|
|
372
|
+
rpop(key: string): Promise<string | undefined>;
|
|
373
|
+
publish(channel: string, message: string): Promise<void>;
|
|
374
|
+
/**
|
|
375
|
+
* Get the Redis connection URL.
|
|
376
|
+
*/
|
|
377
|
+
protected getUrl(): string;
|
|
378
|
+
/**
|
|
379
|
+
* Redis client factory method.
|
|
380
|
+
*/
|
|
381
|
+
protected createClient(): NodeRedisClient;
|
|
382
|
+
}
|
|
383
|
+
//#endregion
|
|
384
|
+
//#region ../../src/redis/providers/NodeRedisSubscriberProvider.d.ts
|
|
385
|
+
/**
|
|
386
|
+
* Node.js Redis subscriber provider using `@redis/client`.
|
|
387
|
+
*
|
|
388
|
+
* This provider creates a dedicated Redis connection for subscriptions,
|
|
389
|
+
* as Redis requires separate connections for pub/sub operations.
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```ts
|
|
393
|
+
* const subscriber = alepha.inject(RedisSubscriberProvider);
|
|
394
|
+
* await subscriber.subscribe("channel", (message, channel) => {
|
|
395
|
+
* console.log(`Received: ${message} on ${channel}`);
|
|
396
|
+
* });
|
|
397
|
+
* ```
|
|
398
|
+
*/
|
|
399
|
+
declare class NodeRedisSubscriberProvider extends RedisSubscriberProvider {
|
|
400
|
+
protected readonly log: alepha_logger0.Logger;
|
|
401
|
+
protected readonly alepha: Alepha;
|
|
402
|
+
protected readonly redisProvider: NodeRedisProvider;
|
|
403
|
+
protected readonly client: NodeRedisClient;
|
|
404
|
+
get subscriber(): NodeRedisClient;
|
|
405
|
+
get isReady(): boolean;
|
|
406
|
+
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
407
|
+
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
408
|
+
connect(): Promise<void>;
|
|
409
|
+
close(): Promise<void>;
|
|
410
|
+
subscribe(channel: string, callback: SubscribeCallback): Promise<void>;
|
|
411
|
+
unsubscribe(channel: string, callback?: SubscribeCallback): Promise<void>;
|
|
66
412
|
/**
|
|
67
413
|
* Redis subscriber client factory method.
|
|
68
414
|
*/
|
|
69
|
-
protected createClient():
|
|
415
|
+
protected createClient(): NodeRedisClient;
|
|
70
416
|
}
|
|
71
417
|
//#endregion
|
|
72
418
|
//#region ../../src/redis/index.d.ts
|
|
73
419
|
/**
|
|
74
420
|
* Redis client provider for Alepha applications.
|
|
75
421
|
*
|
|
76
|
-
*
|
|
422
|
+
* Automatically selects the appropriate provider based on runtime:
|
|
423
|
+
* - Bun: Uses `BunRedisProvider` with Bun's native Redis client (7.9x faster than ioredis)
|
|
424
|
+
* - Node.js: Uses `NodeRedisProvider` with `@redis/client`
|
|
425
|
+
*
|
|
426
|
+
* @example
|
|
427
|
+
* ```ts
|
|
428
|
+
* // Inject the abstract provider - runtime selects the implementation
|
|
429
|
+
* const redis = alepha.inject(RedisProvider);
|
|
430
|
+
*
|
|
431
|
+
* // Use common operations
|
|
432
|
+
* await redis.set("key", "value");
|
|
433
|
+
* const value = await redis.get("key");
|
|
434
|
+
*
|
|
435
|
+
* // For pub/sub
|
|
436
|
+
* const subscriber = alepha.inject(RedisSubscriberProvider);
|
|
437
|
+
* await subscriber.subscribe("channel", (message, channel) => {
|
|
438
|
+
* console.log(`Received: ${message} on ${channel}`);
|
|
439
|
+
* });
|
|
440
|
+
* ```
|
|
441
|
+
*
|
|
442
|
+
* @see {@link RedisProvider} - Abstract base class
|
|
443
|
+
* @see {@link NodeRedisProvider} - Node.js implementation
|
|
444
|
+
* @see {@link BunRedisProvider} - Bun implementation
|
|
445
|
+
* @see {@link RedisSubscriberProvider} - Abstract subscriber base class
|
|
446
|
+
* @see {@link NodeRedisSubscriberProvider} - Node.js subscriber implementation
|
|
447
|
+
* @see {@link BunRedisSubscriberProvider} - Bun subscriber implementation
|
|
77
448
|
* @module alepha.redis
|
|
78
449
|
*/
|
|
79
|
-
declare const AlephaRedis:
|
|
450
|
+
declare const AlephaRedis: alepha1.Service<alepha1.Module>;
|
|
80
451
|
//#endregion
|
|
81
|
-
export { AlephaRedis,
|
|
452
|
+
export { AlephaRedis, BunRedisProvider, BunRedisSubscriberProvider, NodeRedisClient, NodeRedisClientOptions, NodeRedisProvider, NodeRedisSubscriberProvider, RedisProvider, RedisSetOptions, RedisSubscriberProvider, SubscribeCallback };
|
|
82
453
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/redis/providers/RedisProvider.ts","../../src/redis/providers/RedisSubscriberProvider.ts","../../src/redis/index.ts"],"sourcesContent":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/redis/providers/RedisProvider.ts","../../src/redis/providers/BunRedisProvider.ts","../../src/redis/providers/RedisSubscriberProvider.ts","../../src/redis/providers/BunRedisSubscriberProvider.ts","../../src/redis/providers/NodeRedisProvider.ts","../../src/redis/providers/NodeRedisSubscriberProvider.ts","../../src/redis/index.ts"],"sourcesContent":[],"mappings":"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"}
|