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.
Files changed (149) hide show
  1. package/README.md +3 -3
  2. package/dist/api/audits/index.d.ts +80 -1
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js.map +1 -1
  5. package/dist/api/files/index.d.ts +80 -1
  6. package/dist/api/files/index.d.ts.map +1 -1
  7. package/dist/api/files/index.js.map +1 -1
  8. package/dist/api/jobs/index.d.ts +236 -157
  9. package/dist/api/jobs/index.d.ts.map +1 -1
  10. package/dist/api/jobs/index.js.map +1 -1
  11. package/dist/api/notifications/index.d.ts +21 -1
  12. package/dist/api/notifications/index.d.ts.map +1 -1
  13. package/dist/api/parameters/index.d.ts +451 -4
  14. package/dist/api/parameters/index.d.ts.map +1 -1
  15. package/dist/api/parameters/index.js.map +1 -1
  16. package/dist/api/users/index.d.ts +252 -249
  17. package/dist/api/users/index.d.ts.map +1 -1
  18. package/dist/api/users/index.js +4 -0
  19. package/dist/api/users/index.js.map +1 -1
  20. package/dist/api/verifications/index.d.ts +128 -128
  21. package/dist/api/verifications/index.d.ts.map +1 -1
  22. package/dist/batch/index.js.map +1 -1
  23. package/dist/cache/core/index.js.map +1 -1
  24. package/dist/cli/index.d.ts +304 -115
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +650 -531
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/command/index.d.ts +210 -13
  29. package/dist/command/index.d.ts.map +1 -1
  30. package/dist/command/index.js +306 -69
  31. package/dist/command/index.js.map +1 -1
  32. package/dist/core/index.browser.js.map +1 -1
  33. package/dist/core/index.d.ts +1 -1
  34. package/dist/core/index.d.ts.map +1 -1
  35. package/dist/core/index.js +7 -6
  36. package/dist/core/index.js.map +1 -1
  37. package/dist/core/index.native.js +7 -6
  38. package/dist/core/index.native.js.map +1 -1
  39. package/dist/datetime/index.js.map +1 -1
  40. package/dist/fake/index.js.map +1 -1
  41. package/dist/file/index.d.ts.map +1 -1
  42. package/dist/file/index.js.map +1 -1
  43. package/dist/lock/redis/index.js.map +1 -1
  44. package/dist/logger/index.js.map +1 -1
  45. package/dist/mcp/index.js.map +1 -1
  46. package/dist/orm/index.browser.js +26 -5
  47. package/dist/orm/index.browser.js.map +1 -1
  48. package/dist/orm/index.d.ts +294 -215
  49. package/dist/orm/index.d.ts.map +1 -1
  50. package/dist/orm/index.js +522 -523
  51. package/dist/orm/index.js.map +1 -1
  52. package/dist/queue/redis/index.js +2 -4
  53. package/dist/queue/redis/index.js.map +1 -1
  54. package/dist/redis/index.d.ts +400 -29
  55. package/dist/redis/index.d.ts.map +1 -1
  56. package/dist/redis/index.js +412 -21
  57. package/dist/redis/index.js.map +1 -1
  58. package/dist/retry/index.js.map +1 -1
  59. package/dist/router/index.js.map +1 -1
  60. package/dist/scheduler/index.js.map +1 -1
  61. package/dist/security/index.d.ts.map +1 -1
  62. package/dist/security/index.js.map +1 -1
  63. package/dist/server/auth/index.d.ts +155 -155
  64. package/dist/server/auth/index.js.map +1 -1
  65. package/dist/server/cache/index.js.map +1 -1
  66. package/dist/server/cookies/index.browser.js.map +1 -1
  67. package/dist/server/cookies/index.js.map +1 -1
  68. package/dist/server/core/index.browser.js.map +1 -1
  69. package/dist/server/core/index.d.ts +0 -1
  70. package/dist/server/core/index.d.ts.map +1 -1
  71. package/dist/server/core/index.js.map +1 -1
  72. package/dist/server/helmet/index.d.ts +4 -1
  73. package/dist/server/helmet/index.d.ts.map +1 -1
  74. package/dist/server/helmet/index.js.map +1 -1
  75. package/dist/server/links/index.browser.js.map +1 -1
  76. package/dist/server/links/index.js.map +1 -1
  77. package/dist/server/multipart/index.d.ts.map +1 -1
  78. package/dist/server/multipart/index.js.map +1 -1
  79. package/dist/server/proxy/index.js.map +1 -1
  80. package/dist/server/rate-limit/index.js.map +1 -1
  81. package/dist/server/security/index.d.ts +9 -9
  82. package/dist/server/security/index.js.map +1 -1
  83. package/dist/server/swagger/index.js.map +1 -1
  84. package/dist/thread/index.js.map +1 -1
  85. package/dist/topic/core/index.js.map +1 -1
  86. package/dist/topic/redis/index.js +3 -3
  87. package/dist/topic/redis/index.js.map +1 -1
  88. package/dist/vite/index.js +9 -6
  89. package/dist/vite/index.js.map +1 -1
  90. package/dist/websocket/index.browser.js.map +1 -1
  91. package/dist/websocket/index.d.ts +7 -7
  92. package/dist/websocket/index.js.map +1 -1
  93. package/package.json +3 -3
  94. package/src/api/users/index.ts +4 -0
  95. package/src/cli/apps/AlephaCli.ts +36 -14
  96. package/src/cli/apps/AlephaPackageBuilderCli.ts +5 -1
  97. package/src/cli/assets/appRouterTs.ts +1 -1
  98. package/src/cli/atoms/changelogOptions.ts +45 -0
  99. package/src/cli/commands/{ViteCommands.ts → build.ts} +4 -93
  100. package/src/cli/commands/changelog.ts +244 -0
  101. package/src/cli/commands/clean.ts +14 -0
  102. package/src/cli/commands/{DrizzleCommands.ts → db.ts} +37 -124
  103. package/src/cli/commands/deploy.ts +118 -0
  104. package/src/cli/commands/dev.ts +57 -0
  105. package/src/cli/commands/format.ts +17 -0
  106. package/src/cli/commands/{CoreCommands.ts → init.ts} +2 -40
  107. package/src/cli/commands/lint.ts +17 -0
  108. package/src/cli/commands/root.ts +32 -0
  109. package/src/cli/commands/run.ts +24 -0
  110. package/src/cli/commands/test.ts +42 -0
  111. package/src/cli/commands/typecheck.ts +19 -0
  112. package/src/cli/commands/{VerifyCommands.ts → verify.ts} +1 -13
  113. package/src/cli/defineConfig.ts +24 -0
  114. package/src/cli/index.ts +17 -5
  115. package/src/cli/services/AlephaCliUtils.ts +4 -21
  116. package/src/cli/services/GitMessageParser.ts +77 -0
  117. package/src/command/helpers/EnvUtils.ts +37 -0
  118. package/src/command/index.ts +3 -1
  119. package/src/command/primitives/$command.ts +172 -6
  120. package/src/command/providers/CliProvider.ts +424 -91
  121. package/src/core/Alepha.ts +8 -5
  122. package/src/file/providers/NodeFileSystemProvider.ts +3 -1
  123. package/src/orm/index.browser.ts +1 -1
  124. package/src/orm/index.ts +18 -10
  125. package/src/orm/interfaces/PgQueryWhere.ts +1 -26
  126. package/src/orm/providers/{PostgresTypeProvider.ts → DatabaseTypeProvider.ts} +25 -3
  127. package/src/orm/providers/drivers/BunPostgresProvider.ts +225 -0
  128. package/src/orm/providers/drivers/BunSqliteProvider.ts +180 -0
  129. package/src/orm/providers/drivers/DatabaseProvider.ts +25 -0
  130. package/src/orm/providers/drivers/NodePostgresProvider.ts +0 -25
  131. package/src/orm/services/QueryManager.ts +10 -125
  132. package/src/queue/redis/providers/RedisQueueProvider.ts +2 -7
  133. package/src/redis/index.ts +65 -3
  134. package/src/redis/providers/BunRedisProvider.ts +304 -0
  135. package/src/redis/providers/BunRedisSubscriberProvider.ts +94 -0
  136. package/src/redis/providers/NodeRedisProvider.ts +280 -0
  137. package/src/redis/providers/NodeRedisSubscriberProvider.ts +94 -0
  138. package/src/redis/providers/RedisProvider.ts +134 -140
  139. package/src/redis/providers/RedisSubscriberProvider.ts +58 -49
  140. package/src/server/core/providers/BunHttpServerProvider.ts +0 -3
  141. package/src/server/core/providers/ServerBodyParserProvider.ts +3 -1
  142. package/src/server/core/providers/ServerProvider.ts +7 -4
  143. package/src/server/multipart/providers/ServerMultipartProvider.ts +3 -1
  144. package/src/server/proxy/providers/ServerProxyProvider.ts +1 -1
  145. package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
  146. package/src/vite/tasks/buildServer.ts +1 -0
  147. package/src/cli/commands/BiomeCommands.ts +0 -29
  148. package/src/cli/commands/ChangelogCommands.ts +0 -389
  149. 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.publisher.LPUSH(this.prefix(queue), message);
14
+ await this.redisProvider.lpush(this.prefix(queue), message);
15
15
  }
16
16
  async pop(queue) {
17
- const value = await this.redisProvider.publisher.RPOP(this.prefix(queue));
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.publisher.LPUSH(this.prefix(queue), message);\n }\n\n public async pop(queue: string): Promise<string | undefined> {\n const value = await this.redisProvider.publisher.RPOP(this.prefix(queue));\n if (value == null) {\n return undefined;\n }\n\n return String(value);\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,UAAU,MAAM,KAAK,OAAO,MAAM,EAAE,QAAQ;;CAGvE,MAAa,IAAI,OAA4C;EAC3D,MAAM,QAAQ,MAAM,KAAK,cAAc,UAAU,KAAK,KAAK,OAAO,MAAM,CAAC;AACzE,MAAI,SAAS,KACX;AAGF,SAAO,OAAO,MAAM;;;;;;;;;;;;ACZxB,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"}
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"}
@@ -1,37 +1,194 @@
1
- import * as alepha3 from "alepha";
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
- declare const envSchema: alepha3.TObject<{
8
- REDIS_PORT: alepha3.TInteger;
9
- REDIS_HOST: alepha3.TString;
10
- REDIS_PASSWORD: alepha3.TOptional<alepha3.TString>;
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 readonly client: RedisClient;
187
+ protected client?: RedisClient;
32
188
  get publisher(): RedisClient;
33
- protected readonly start: alepha3.HookPrimitive<"start">;
34
- protected readonly stop: alepha3.HookPrimitive<"stop">;
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
- duplicate(options?: Partial<RedisClientOptions>): RedisClient;
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
- * Redis subscriber client factory method.
213
+ * Get the Redis connection URL.
51
214
  */
52
- protected createClient(): RedisClient;
215
+ protected getUrl(): string;
53
216
  }
54
217
  //#endregion
55
218
  //#region ../../src/redis/providers/RedisSubscriberProvider.d.ts
56
- declare class RedisSubscriberProvider {
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: RedisProvider;
60
- protected readonly client: RedisClient;
292
+ protected readonly redisProvider: BunRedisProvider;
293
+ protected client?: RedisClient;
61
294
  get subscriber(): RedisClient;
62
- protected readonly start: alepha3.HookPrimitive<"start">;
63
- protected readonly stop: alepha3.HookPrimitive<"stop">;
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(): RedisClient;
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
- * @see {@link RedisProvider}
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: alepha3.Service<alepha3.Module>;
450
+ declare const AlephaRedis: alepha1.Service<alepha1.Module>;
80
451
  //#endregion
81
- export { AlephaRedis, RedisClient, RedisClientOptions, RedisProvider, RedisSetOptions, RedisSubscriberProvider };
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":";;;;;;cASM,mBAAS;cAQb,OAAA,CAAA;;;AAXoE,CAAA,CAAA;eAWpE,QAAA,CAAA;wBAGsB,QAAQ,cAAc;;KAGlC,WAAA,GAAc,eAdX,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA;EAAA,EAAA,EAmBP,iBAnBO;AAAA,CAAA,CAAA;AAAA,KAqBH,kBAAA,GAAqB,UArBlB,CAAA,OAqBoC,YArBpC,CAAA,CAAA,CAAA,CAAA;AAAA,KAsBH,eAAA,GAAkB,UAtBf;;;;AAWgB,cAgBlB,aAAA,CAhBkB;EAAA,mBAAA,GAAA,EAgBL,cAAA,CACF,MAjBO;EAAA,mBAAA,MAAA,EAkBJ,MAlBI;EAGnB,mBAAW,GAAA,EAAA;IAOX,cAAA,CAAA,EAAkB,MAAA,GAAA,SAAqB;IACvC,UAAA,EAAA,MAAe;IAKd,UAAA,EAAa,MAAA;EAAA,CAAA;EAEC,mBAAA,MAAA,EAEA,WAFA;EAEA,IAAA,SAAA,CAAA,CAAA,EAED,WAFC;EAED,mBAAA,KAAA,EAAW,OAAA,CAQX,aARA,CAAA,OAAA,CAAA;EAAW,mBAQX,IAAA,EAAA,OAAA,CAKD,aALC,CAAA,MAAA,CAAA;EAAA;;;EA4BW,OAAA,CAAA,CAAA,EAfX,OAeW,CAAA,IAAA,CAAA;EAAR;;;EAWI,KAAA,CAAA,CAAA,EAjBT,OAiBS,CAAA,IAAA,CAAA;EAatB,SAAA,CAAA,OAAA,CAAA,EAxBkB,OAwBlB,CAxB0B,kBAwB1B,CAAA,CAAA,EAxBgD,WAwBhD;EACG,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAdmB,OAcnB,CAd2B,MAc3B,GAAA,SAAA,CAAA;EACD,GAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EAFF,MAEE,GAAA,MAAA,EAAA,OAAA,CAAA,EADC,eACD,CAAA,EAAR,OAAQ,CAAA,MAAA,CAAA;EAAR,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAW4B,OAX5B,CAAA,OAAA,CAAA;EAW4B,IAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAKK,OALL,CAAA,MAAA,EAAA,CAAA;EAKK,GAAA,CAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAKF,OALE,CAAA,IAAA,CAAA;EAKF;;;4BAWR;;;;cCnIf,uBAAA;0BAAuB,cAAA,CACZ;6BACG;EDErB,mBAQJ,aAAA,ECTkC,aDSlC;EAAA,mBAAA,MAAA,ECR2B,WDQ3B;oBCNyB;4BAAW,OAAA,CAQZ;2BAAA,OAAA,CAKD;SDfV,CAAA,CAAA,ECoBW,ODpBX,CAAA,IAAA,CAAA;EAAA,KAAA,CAAA,CAAA,EC0BS,OD1BT,CAAA,IAAA,CAAA;EAAA;;;EAW+B,UAAA,YAAA,CAAA,CAAA,ECwBlB,WDxBkB;;;;;;;;AAdwB;;cEWzD,aAAW,OAAA,CAAA,QAItB,OAAA,CAJsB,MAAA"}
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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"}