alepha 0.14.4 → 0.15.1
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 +44 -102
- package/dist/api/audits/index.d.ts +331 -443
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +2 -2
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +0 -113
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +2 -3
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +151 -262
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/notifications/index.browser.js +4 -4
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +164 -276
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +4 -4
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +265 -377
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/users/index.browser.js +1 -2
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +195 -301
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +203 -184
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +1 -2
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +5900 -165
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1481 -639
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +8 -4
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +29 -25
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +563 -54
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +175 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +564 -54
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +563 -54
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +4 -4
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +89 -42
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +129 -33
- package/dist/email/index.js.map +1 -1
- package/dist/fake/index.d.ts +7969 -2
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +22 -22
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +134 -1
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +253 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +1 -2
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -5
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +19 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +28 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/chunk-DH6iiROE.js +38 -0
- package/dist/orm/index.browser.js +9 -9
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +2821 -0
- package/dist/orm/index.bun.js.map +1 -0
- package/dist/orm/index.d.ts +318 -169
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +2086 -1776
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +4 -4
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/redis/index.bun.js +285 -0
- package/dist/redis/index.bun.js.map +1 -0
- package/dist/redis/index.d.ts +13 -31
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +18 -38
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +83 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +393 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.browser.js +5 -1
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +598 -112
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1808 -97
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1200 -175
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1268 -37
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +6 -3
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +1 -1
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +3 -3
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.d.ts +115 -13
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +321 -139
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +0 -1
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts +0 -1
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js +9 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +1 -2
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +14 -7
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +514 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +4462 -4
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +0 -1
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +1 -2
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +1 -2
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +3 -1
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +10 -10
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +0 -1
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +6315 -149
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +140 -469
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +9 -9
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +28 -28
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +9 -9
- package/dist/websocket/index.js.map +1 -1
- package/package.json +13 -18
- package/src/api/files/controllers/AdminFileStatsController.ts +0 -1
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +5 -0
- package/src/api/users/controllers/{UserRealmController.ts → RealmController.ts} +11 -11
- package/src/api/users/entities/users.ts +1 -1
- package/src/api/users/index.ts +8 -8
- package/src/api/users/primitives/{$userRealm.ts → $realm.ts} +17 -19
- package/src/api/users/providers/{UserRealmProvider.ts → RealmProvider.ts} +26 -30
- package/src/api/users/schemas/{userRealmConfigSchema.ts → realmConfigSchema.ts} +2 -2
- package/src/api/users/services/CredentialService.ts +7 -7
- package/src/api/users/services/IdentityService.ts +4 -4
- package/src/api/users/services/RegistrationService.spec.ts +25 -27
- package/src/api/users/services/RegistrationService.ts +38 -27
- package/src/api/users/services/SessionCrudService.ts +3 -3
- package/src/api/users/services/SessionService.spec.ts +3 -3
- package/src/api/users/services/SessionService.ts +27 -18
- package/src/api/users/services/UserService.ts +7 -7
- package/src/batch/providers/BatchProvider.ts +1 -2
- package/src/cli/apps/AlephaCli.ts +2 -2
- package/src/cli/apps/AlephaPackageBuilderCli.ts +47 -20
- package/src/cli/assets/apiHelloControllerTs.ts +19 -0
- package/src/cli/assets/apiIndexTs.ts +16 -0
- package/src/cli/assets/biomeJson.ts +2 -1
- package/src/cli/assets/claudeMd.ts +308 -0
- package/src/cli/assets/dummySpecTs.ts +2 -1
- package/src/cli/assets/editorconfig.ts +2 -1
- package/src/cli/assets/mainBrowserTs.ts +4 -3
- package/src/cli/assets/mainCss.ts +24 -0
- package/src/cli/assets/mainServerTs.ts +24 -0
- package/src/cli/assets/tsconfigJson.ts +2 -1
- package/src/cli/assets/webAppRouterTs.ts +16 -0
- package/src/cli/assets/webHelloComponentTsx.ts +20 -0
- package/src/cli/assets/webIndexTs.ts +16 -0
- package/src/cli/atoms/appEntryOptions.ts +13 -0
- package/src/cli/atoms/buildOptions.ts +1 -1
- package/src/cli/atoms/changelogOptions.ts +1 -1
- package/src/cli/commands/build.ts +97 -61
- package/src/cli/commands/db.ts +21 -18
- package/src/cli/commands/deploy.ts +17 -5
- package/src/cli/commands/dev.ts +26 -47
- package/src/cli/commands/gen/env.ts +1 -1
- package/src/cli/commands/init.ts +79 -25
- package/src/cli/commands/lint.ts +9 -3
- package/src/cli/commands/test.ts +8 -2
- package/src/cli/commands/typecheck.ts +5 -1
- package/src/cli/commands/verify.ts +4 -2
- package/src/cli/defineConfig.ts +9 -0
- package/src/cli/index.ts +2 -1
- package/src/cli/providers/AppEntryProvider.ts +131 -0
- package/src/cli/providers/ViteBuildProvider.ts +82 -0
- package/src/cli/providers/ViteDevServerProvider.ts +350 -0
- package/src/cli/providers/ViteTemplateProvider.ts +27 -0
- package/src/cli/services/AlephaCliUtils.ts +72 -602
- package/src/cli/services/PackageManagerUtils.ts +308 -0
- package/src/cli/services/ProjectScaffolder.ts +329 -0
- package/src/command/helpers/Runner.ts +15 -3
- package/src/core/Alepha.ts +2 -8
- package/src/core/__tests__/Alepha-graph.spec.ts +4 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +2 -0
- package/src/core/primitives/$hook.ts +6 -2
- package/src/core/primitives/$module.spec.ts +4 -0
- package/src/core/primitives/$module.ts +12 -0
- package/src/core/providers/AlsProvider.ts +1 -1
- package/src/core/providers/CodecManager.spec.ts +12 -6
- package/src/core/providers/CodecManager.ts +26 -6
- package/src/core/providers/EventManager.ts +169 -13
- package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +878 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +789 -0
- package/src/core/providers/SchemaValidator.spec.ts +236 -0
- package/src/core/providers/StateManager.spec.ts +27 -16
- package/src/email/providers/LocalEmailProvider.spec.ts +111 -87
- package/src/email/providers/LocalEmailProvider.ts +52 -15
- package/src/email/providers/NodemailerEmailProvider.ts +167 -56
- package/src/file/errors/FileError.ts +7 -0
- package/src/file/index.ts +9 -1
- package/src/file/providers/MemoryFileSystemProvider.ts +393 -0
- package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
- package/src/mcp/errors/McpError.ts +30 -0
- package/src/mcp/index.ts +3 -0
- package/src/mcp/transports/SseMcpTransport.ts +16 -6
- package/src/orm/index.browser.ts +1 -19
- package/src/orm/index.bun.ts +77 -0
- package/src/orm/index.shared-server.ts +22 -0
- package/src/orm/index.shared.ts +15 -0
- package/src/orm/index.ts +19 -39
- package/src/orm/providers/DrizzleKitProvider.ts +3 -5
- package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -5
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +4 -0
- package/src/orm/providers/drivers/DatabaseProvider.ts +4 -0
- package/src/orm/providers/drivers/PglitePostgresProvider.ts +4 -0
- package/src/orm/services/Repository.ts +19 -0
- package/src/redis/index.bun.ts +35 -0
- package/src/redis/providers/BunRedisProvider.ts +12 -43
- package/src/redis/providers/BunRedisSubscriberProvider.ts +2 -3
- package/src/redis/providers/NodeRedisProvider.ts +16 -34
- package/src/{server/security → security}/__tests__/BasicAuth.spec.ts +11 -11
- package/src/{server/security → security}/__tests__/ServerSecurityProvider-realm.spec.ts +21 -16
- package/src/{server/security/providers → security/__tests__}/ServerSecurityProvider.spec.ts +5 -5
- package/src/security/index.browser.ts +5 -0
- package/src/security/index.ts +90 -7
- package/src/security/primitives/{$realm.spec.ts → $issuer.spec.ts} +11 -11
- package/src/security/primitives/{$realm.ts → $issuer.ts} +20 -17
- package/src/security/primitives/$role.ts +5 -5
- package/src/security/primitives/$serviceAccount.spec.ts +5 -5
- package/src/security/primitives/$serviceAccount.ts +3 -3
- package/src/{server/security → security}/providers/ServerSecurityProvider.ts +5 -7
- package/src/server/auth/primitives/$auth.ts +10 -10
- package/src/server/auth/primitives/$authCredentials.ts +3 -3
- package/src/server/auth/primitives/$authGithub.ts +3 -3
- package/src/server/auth/primitives/$authGoogle.ts +3 -3
- package/src/server/auth/providers/ServerAuthProvider.ts +13 -13
- package/src/server/cache/providers/ServerCacheProvider.ts +1 -1
- package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
- package/src/server/core/index.ts +1 -1
- package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
- package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
- package/src/server/core/providers/NodeHttpServerProvider.ts +92 -24
- package/src/server/core/providers/ServerBodyParserProvider.ts +19 -23
- package/src/server/core/providers/ServerLoggerProvider.ts +23 -19
- package/src/server/core/providers/ServerProvider.ts +144 -24
- package/src/server/core/providers/ServerRouterProvider.ts +259 -115
- package/src/server/core/providers/ServerTimingProvider.ts +2 -2
- package/src/server/links/atoms/apiLinksAtom.ts +7 -0
- package/src/server/links/index.browser.ts +2 -0
- package/src/server/links/index.ts +3 -1
- package/src/server/links/providers/LinkProvider.ts +1 -1
- package/src/server/swagger/index.ts +1 -1
- package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
- package/src/sms/providers/LocalSmsProvider.ts +8 -7
- package/src/vite/index.ts +3 -2
- package/src/vite/tasks/buildClient.ts +0 -1
- package/src/vite/tasks/buildServer.ts +80 -22
- package/src/vite/tasks/copyAssets.ts +5 -4
- package/src/vite/tasks/generateCloudflare.ts +7 -0
- package/src/vite/tasks/generateSitemap.ts +64 -23
- package/src/vite/tasks/index.ts +0 -2
- package/src/vite/tasks/prerenderPages.ts +49 -24
- package/dist/server/security/index.browser.js +0 -13
- package/dist/server/security/index.browser.js.map +0 -1
- package/dist/server/security/index.d.ts +0 -173
- package/dist/server/security/index.d.ts.map +0 -1
- package/dist/server/security/index.js +0 -311
- package/dist/server/security/index.js.map +0 -1
- package/src/cli/assets/appRouterTs.ts +0 -9
- package/src/cli/assets/indexHtml.ts +0 -15
- package/src/cli/assets/mainTs.ts +0 -13
- package/src/cli/commands/format.ts +0 -17
- package/src/server/security/index.browser.ts +0 -10
- package/src/server/security/index.ts +0 -94
- package/src/vite/helpers/boot.ts +0 -106
- package/src/vite/plugins/viteAlephaDev.ts +0 -177
- package/src/vite/tasks/devServer.ts +0 -69
- package/src/vite/tasks/runAlepha.ts +0 -270
- /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as alepha1 from "alepha";
|
|
2
2
|
import { Alepha, KIND, Primitive, Service, Static, TSchema } from "alepha";
|
|
3
|
-
import * as
|
|
3
|
+
import * as alepha_logger0 from "alepha/logger";
|
|
4
4
|
import { DateTimeProvider } from "alepha/datetime";
|
|
5
5
|
|
|
6
6
|
//#region ../../src/queue/core/providers/QueueProvider.d.ts
|
|
@@ -29,7 +29,7 @@ declare abstract class QueueProvider {
|
|
|
29
29
|
//#endregion
|
|
30
30
|
//#region ../../src/queue/core/providers/MemoryQueueProvider.d.ts
|
|
31
31
|
declare class MemoryQueueProvider implements QueueProvider {
|
|
32
|
-
protected readonly log:
|
|
32
|
+
protected readonly log: alepha_logger0.Logger;
|
|
33
33
|
protected queueList: Record<string, string[]>;
|
|
34
34
|
push(queue: string, ...messages: string[]): Promise<void>;
|
|
35
35
|
pop(queue: string): Promise<string | undefined>;
|
|
@@ -55,7 +55,7 @@ declare module "alepha" {
|
|
|
55
55
|
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
56
56
|
}
|
|
57
57
|
declare class WorkerProvider {
|
|
58
|
-
protected readonly log:
|
|
58
|
+
protected readonly log: alepha_logger0.Logger;
|
|
59
59
|
protected readonly env: {
|
|
60
60
|
QUEUE_WORKER_INTERVAL: number;
|
|
61
61
|
QUEUE_WORKER_MAX_INTERVAL: number;
|
|
@@ -351,7 +351,7 @@ interface QueuePrimitiveOptions<T extends TSchema> {
|
|
|
351
351
|
handler?: (message: QueueMessage<T>) => Promise<void>;
|
|
352
352
|
}
|
|
353
353
|
declare class QueuePrimitive<T extends TSchema> extends Primitive<QueuePrimitiveOptions<T>> {
|
|
354
|
-
protected readonly log:
|
|
354
|
+
protected readonly log: alepha_logger0.Logger;
|
|
355
355
|
protected readonly workerProvider: WorkerProvider;
|
|
356
356
|
readonly provider: QueueProvider | MemoryQueueProvider;
|
|
357
357
|
push(...payloads: Array<Static<T>>): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/core/providers/QueueProvider.ts","../../../src/queue/core/providers/MemoryQueueProvider.ts","../../../src/queue/core/providers/WorkerProvider.ts","../../../src/queue/core/primitives/$queue.ts","../../../src/queue/core/primitives/$consumer.ts","../../../src/queue/core/index.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/queue/redis/providers/RedisQueueProvider.ts","../../../src/queue/redis/index.ts"],"mappings":";;;;;;cAIM,SAAA,EAIJ,OAAA,CAJa,OAAA;sBAIb,OAAA,CAAA,OAAA;AAAA;AAAA,cAEW,kBAAA,YAA8B,aAAA;EAAA,mBACtB,GAAA,EAAK,MAAA,QAAc,SAAA;EAAA,mBACnB,aAAA,EAAe,aAAA;EAE3B,MAAA,CAAO,KAAA;EAID,IAAA,CAAK,KAAA,UAAe,OAAA,WAAkB,OAAA;EAItC,GAAA,CAAI,KAAA,WAAgB,OAAA;AAAA;;;;;;;;AApBU;cCchC,gBAAA,EAAgB,OAAA,CAAA,OAAA,CAW3B,OAAA,CAX2B,MAAA"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { $env, $hook, $inject, $module, Alepha, AlephaError, t } from "alepha";
|
|
2
|
+
import { $logger } from "alepha/logger";
|
|
3
|
+
|
|
4
|
+
//#region ../../src/redis/providers/RedisProvider.ts
|
|
5
|
+
/**
|
|
6
|
+
* Abstract Redis provider interface.
|
|
7
|
+
*
|
|
8
|
+
* This abstract class defines the common interface for Redis operations.
|
|
9
|
+
* Implementations include:
|
|
10
|
+
* - {@link NodeRedisProvider} - Uses `@redis/client` for Node.js runtime
|
|
11
|
+
* - {@link BunRedisProvider} - Uses Bun's native `RedisClient` for Bun runtime
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Inject the abstract provider - runtime selects the implementation
|
|
16
|
+
* const redis = alepha.inject(RedisProvider);
|
|
17
|
+
*
|
|
18
|
+
* // Use common operations
|
|
19
|
+
* await redis.set("key", "value");
|
|
20
|
+
* const value = await redis.get("key");
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
var RedisProvider = class {};
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region ../../src/redis/providers/BunRedisProvider.ts
|
|
27
|
+
const envSchema = t.object({ REDIS_URL: t.text({
|
|
28
|
+
default: "redis://localhost:6379",
|
|
29
|
+
description: "Redis connection URL"
|
|
30
|
+
}) });
|
|
31
|
+
/**
|
|
32
|
+
* Bun Redis client provider using Bun's native Redis client.
|
|
33
|
+
*
|
|
34
|
+
* This provider uses Bun's built-in `RedisClient` class for Redis connections,
|
|
35
|
+
* which provides excellent performance (7.9x faster than ioredis) on the Bun runtime.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* // Set REDIS_URL environment variable (default: redis://localhost:6379)
|
|
40
|
+
* // REDIS_URL=redis://:password@myredis.example.com:6379
|
|
41
|
+
*
|
|
42
|
+
* // Or configure programmatically
|
|
43
|
+
* alepha.with({
|
|
44
|
+
* provide: RedisProvider,
|
|
45
|
+
* use: BunRedisProvider,
|
|
46
|
+
* });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
var BunRedisProvider = class extends RedisProvider {
|
|
50
|
+
log = $logger();
|
|
51
|
+
alepha = $inject(Alepha);
|
|
52
|
+
env = $env(envSchema);
|
|
53
|
+
client;
|
|
54
|
+
get publisher() {
|
|
55
|
+
if (!this.client?.connected) throw new AlephaError("Redis client is not ready");
|
|
56
|
+
return this.client;
|
|
57
|
+
}
|
|
58
|
+
get isReady() {
|
|
59
|
+
return this.client?.connected ?? false;
|
|
60
|
+
}
|
|
61
|
+
start = $hook({
|
|
62
|
+
on: "start",
|
|
63
|
+
handler: () => this.connect()
|
|
64
|
+
});
|
|
65
|
+
stop = $hook({
|
|
66
|
+
on: "stop",
|
|
67
|
+
handler: () => this.close()
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* Connect to the Redis server.
|
|
71
|
+
*/
|
|
72
|
+
async connect() {
|
|
73
|
+
if (!this.alepha.isBun()) throw new AlephaError("BunRedisProvider requires the Bun runtime. Use NodeRedisProvider for Node.js.");
|
|
74
|
+
this.log.debug("Connecting...");
|
|
75
|
+
this.client = new Bun.RedisClient(this.getUrl(), {
|
|
76
|
+
autoReconnect: true,
|
|
77
|
+
enableAutoPipelining: true
|
|
78
|
+
});
|
|
79
|
+
this.client.onconnect = () => {
|
|
80
|
+
this.log.trace("Redis connected");
|
|
81
|
+
};
|
|
82
|
+
this.client.onclose = (error) => {
|
|
83
|
+
if (this.alepha.isStarted() && error) this.log.error("Redis connection closed", error);
|
|
84
|
+
};
|
|
85
|
+
await this.client.connect();
|
|
86
|
+
this.log.info("Connection OK");
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Close the connection to the Redis server.
|
|
90
|
+
*/
|
|
91
|
+
async close() {
|
|
92
|
+
if (this.client) {
|
|
93
|
+
this.log.debug("Closing connection...");
|
|
94
|
+
this.client.close();
|
|
95
|
+
this.client = void 0;
|
|
96
|
+
this.log.info("Connection closed");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a duplicate connection for pub/sub or other isolated operations.
|
|
101
|
+
*/
|
|
102
|
+
async duplicate() {
|
|
103
|
+
if (typeof Bun === "undefined") throw new AlephaError("BunRedisProvider requires the Bun runtime.");
|
|
104
|
+
const client = new Bun.RedisClient(this.getUrl(), {
|
|
105
|
+
autoReconnect: true,
|
|
106
|
+
enableAutoPipelining: true
|
|
107
|
+
});
|
|
108
|
+
client.onclose = (error) => {
|
|
109
|
+
if (this.alepha.isStarted() && error) this.log.error("Redis duplicate connection closed", error);
|
|
110
|
+
};
|
|
111
|
+
await client.connect();
|
|
112
|
+
return client;
|
|
113
|
+
}
|
|
114
|
+
async get(key) {
|
|
115
|
+
this.log.trace(`Getting key ${key}`);
|
|
116
|
+
const resp = await this.publisher.getBuffer(key);
|
|
117
|
+
if (resp === null) return;
|
|
118
|
+
return Buffer.from(resp);
|
|
119
|
+
}
|
|
120
|
+
async set(key, value, options) {
|
|
121
|
+
const buf = Buffer.isBuffer(value) ? value : Buffer.from(value, "utf-8");
|
|
122
|
+
const args = [key, buf.toString("binary")];
|
|
123
|
+
if (options?.expiration) if (options.expiration.type === "KEEPTTL") args.push("KEEPTTL");
|
|
124
|
+
else args.push(options.expiration.type, String(options.expiration.value));
|
|
125
|
+
if (options?.EX !== void 0) args.push("EX", String(options.EX));
|
|
126
|
+
if (options?.PX !== void 0) args.push("PX", String(options.PX));
|
|
127
|
+
if (options?.EXAT !== void 0) args.push("EXAT", String(options.EXAT));
|
|
128
|
+
if (options?.PXAT !== void 0) args.push("PXAT", String(options.PXAT));
|
|
129
|
+
if (options?.KEEPTTL) args.push("KEEPTTL");
|
|
130
|
+
if (options?.condition === "NX") args.push("NX");
|
|
131
|
+
else if (options?.condition === "XX") args.push("XX");
|
|
132
|
+
if (options?.NX) args.push("NX");
|
|
133
|
+
if (options?.XX) args.push("XX");
|
|
134
|
+
if (options?.GET) args.push("GET");
|
|
135
|
+
if (args.length === 2) await this.publisher.set(key, buf);
|
|
136
|
+
else await this.publisher.send("SET", args);
|
|
137
|
+
return buf;
|
|
138
|
+
}
|
|
139
|
+
async has(key) {
|
|
140
|
+
return this.publisher.exists(key);
|
|
141
|
+
}
|
|
142
|
+
async keys(pattern) {
|
|
143
|
+
const keys = await this.publisher.send("KEYS", [pattern]);
|
|
144
|
+
if (!Array.isArray(keys)) return [];
|
|
145
|
+
return keys.map((key) => key instanceof Uint8Array ? Buffer.from(key).toString() : String(key));
|
|
146
|
+
}
|
|
147
|
+
async del(keys) {
|
|
148
|
+
if (keys.length === 0) return;
|
|
149
|
+
await this.publisher.send("DEL", keys);
|
|
150
|
+
}
|
|
151
|
+
async lpush(key, value) {
|
|
152
|
+
await this.publisher.send("LPUSH", [key, value]);
|
|
153
|
+
}
|
|
154
|
+
async rpop(key) {
|
|
155
|
+
const value = await this.publisher.send("RPOP", [key]);
|
|
156
|
+
if (value == null) return;
|
|
157
|
+
if (value instanceof Uint8Array) return Buffer.from(value).toString();
|
|
158
|
+
return String(value);
|
|
159
|
+
}
|
|
160
|
+
async publish(channel, message) {
|
|
161
|
+
await this.publisher.publish(channel, message);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get the Redis connection URL.
|
|
165
|
+
*/
|
|
166
|
+
getUrl() {
|
|
167
|
+
return this.env.REDIS_URL;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region ../../src/redis/providers/RedisSubscriberProvider.ts
|
|
173
|
+
/**
|
|
174
|
+
* Abstract Redis subscriber provider interface.
|
|
175
|
+
*
|
|
176
|
+
* This abstract class defines the common interface for Redis pub/sub subscriptions.
|
|
177
|
+
* Implementations include:
|
|
178
|
+
* - {@link NodeRedisSubscriberProvider} - Uses `@redis/client` for Node.js runtime
|
|
179
|
+
* - {@link BunRedisSubscriberProvider} - Uses Bun's native `RedisClient` for Bun runtime
|
|
180
|
+
*
|
|
181
|
+
* Redis requires separate connections for pub/sub operations, so this provider
|
|
182
|
+
* creates a dedicated connection for subscriptions.
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```ts
|
|
186
|
+
* // Inject the abstract provider - runtime selects the implementation
|
|
187
|
+
* const subscriber = alepha.inject(RedisSubscriberProvider);
|
|
188
|
+
*
|
|
189
|
+
* // Subscribe to a channel
|
|
190
|
+
* await subscriber.subscribe("my-channel", (message, channel) => {
|
|
191
|
+
* console.log(`Received: ${message} on ${channel}`);
|
|
192
|
+
* });
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
var RedisSubscriberProvider = class {};
|
|
196
|
+
|
|
197
|
+
//#endregion
|
|
198
|
+
//#region ../../src/redis/providers/BunRedisSubscriberProvider.ts
|
|
199
|
+
/**
|
|
200
|
+
* Bun Redis subscriber provider for pub/sub operations.
|
|
201
|
+
*
|
|
202
|
+
* This provider creates a dedicated Redis connection for subscriptions,
|
|
203
|
+
* as Redis requires separate connections for pub/sub operations.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* const subscriber = alepha.inject(RedisSubscriberProvider);
|
|
208
|
+
* await subscriber.subscribe("channel", (message, channel) => {
|
|
209
|
+
* console.log(`Received: ${message} on ${channel}`);
|
|
210
|
+
* });
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
var BunRedisSubscriberProvider = class extends RedisSubscriberProvider {
|
|
214
|
+
log = $logger();
|
|
215
|
+
alepha = $inject(Alepha);
|
|
216
|
+
redisProvider = $inject(BunRedisProvider);
|
|
217
|
+
client;
|
|
218
|
+
get subscriber() {
|
|
219
|
+
if (!this.client?.connected) throw new AlephaError("Redis subscriber client is not ready");
|
|
220
|
+
return this.client;
|
|
221
|
+
}
|
|
222
|
+
get isReady() {
|
|
223
|
+
return this.client?.connected ?? false;
|
|
224
|
+
}
|
|
225
|
+
start = $hook({
|
|
226
|
+
on: "start",
|
|
227
|
+
handler: () => this.connect()
|
|
228
|
+
});
|
|
229
|
+
stop = $hook({
|
|
230
|
+
on: "stop",
|
|
231
|
+
handler: () => this.close()
|
|
232
|
+
});
|
|
233
|
+
/**
|
|
234
|
+
* Connect to the Redis server for subscriptions.
|
|
235
|
+
*/
|
|
236
|
+
async connect() {
|
|
237
|
+
this.log.debug("Connecting subscriber...");
|
|
238
|
+
this.client = await this.redisProvider.duplicate();
|
|
239
|
+
this.log.info("Subscriber connection OK");
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Close the subscriber connection.
|
|
243
|
+
*/
|
|
244
|
+
async close() {
|
|
245
|
+
if (this.client) {
|
|
246
|
+
this.log.debug("Closing subscriber connection...");
|
|
247
|
+
this.client.close();
|
|
248
|
+
this.client = void 0;
|
|
249
|
+
this.log.info("Subscriber connection closed");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
async subscribe(channel, callback) {
|
|
253
|
+
await this.subscriber.subscribe(channel, (message, ch) => {
|
|
254
|
+
callback(typeof message === "object" && message !== null ? Buffer.from(message).toString() : String(message), ch);
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
async unsubscribe(channel, _callback) {
|
|
258
|
+
await this.subscriber.unsubscribe(channel);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
//#endregion
|
|
263
|
+
//#region ../../src/redis/index.bun.ts
|
|
264
|
+
const AlephaRedis = $module({
|
|
265
|
+
name: "alepha.redis",
|
|
266
|
+
services: [
|
|
267
|
+
BunRedisProvider,
|
|
268
|
+
BunRedisSubscriberProvider,
|
|
269
|
+
RedisProvider,
|
|
270
|
+
RedisSubscriberProvider
|
|
271
|
+
],
|
|
272
|
+
register: (alepha) => {
|
|
273
|
+
alepha.with({
|
|
274
|
+
provide: RedisProvider,
|
|
275
|
+
use: BunRedisProvider
|
|
276
|
+
}).with({
|
|
277
|
+
provide: RedisSubscriberProvider,
|
|
278
|
+
use: BunRedisSubscriberProvider
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
//#endregion
|
|
284
|
+
export { AlephaRedis, BunRedisProvider, BunRedisSubscriberProvider, RedisProvider, RedisSubscriberProvider };
|
|
285
|
+
//# sourceMappingURL=index.bun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.bun.js","names":[],"sources":["../../src/redis/providers/RedisProvider.ts","../../src/redis/providers/BunRedisProvider.ts","../../src/redis/providers/RedisSubscriberProvider.ts","../../src/redis/providers/BunRedisSubscriberProvider.ts","../../src/redis/index.bun.ts"],"sourcesContent":["/**\n * Abstract Redis provider interface.\n *\n * This abstract class defines the common interface for Redis operations.\n * Implementations include:\n * - {@link NodeRedisProvider} - Uses `@redis/client` for Node.js runtime\n * - {@link BunRedisProvider} - Uses Bun's native `RedisClient` for Bun runtime\n *\n * @example\n * ```ts\n * // Inject the abstract provider - runtime selects the implementation\n * const redis = alepha.inject(RedisProvider);\n *\n * // Use common operations\n * await redis.set(\"key\", \"value\");\n * const value = await redis.get(\"key\");\n * ```\n */\nexport abstract class RedisProvider {\n /**\n * Whether the Redis client is ready to accept commands.\n */\n public abstract readonly isReady: boolean;\n\n /**\n * Connect to the Redis server.\n */\n public abstract connect(): Promise<void>;\n\n /**\n * Close the connection to the Redis server.\n */\n public abstract close(): Promise<void>;\n\n /**\n * Get the value of a key.\n *\n * @param key The key to get.\n * @returns The value as a Buffer, or undefined if the key does not exist.\n */\n public abstract get(key: string): Promise<Buffer | undefined>;\n\n /**\n * Set the value of a key.\n *\n * @param key The key to set.\n * @param value The value to set (Buffer or string).\n * @param options Optional set options (EX, PX, NX, XX, etc.).\n * @returns The value as a Buffer.\n */\n public abstract set(\n key: string,\n value: Buffer | string,\n options?: RedisSetOptions,\n ): Promise<Buffer>;\n\n /**\n * Check if a key exists.\n *\n * @param key The key to check.\n * @returns True if the key exists.\n */\n public abstract has(key: string): Promise<boolean>;\n\n /**\n * Get all keys matching a pattern.\n *\n * @param pattern The glob-style pattern to match.\n * @returns Array of matching key names.\n */\n public abstract keys(pattern: string): Promise<string[]>;\n\n /**\n * Delete one or more keys.\n *\n * @param keys The keys to delete.\n */\n public abstract del(keys: string[]): Promise<void>;\n\n // ---------------------------------------------------------\n // Queue operations (for alepha/queue-redis)\n // ---------------------------------------------------------\n\n /**\n * Push a value to the left (head) of a list.\n *\n * @param key The list key.\n * @param value The value to push.\n */\n public abstract lpush(key: string, value: string): Promise<void>;\n\n /**\n * Pop a value from the right (tail) of a list.\n *\n * @param key The list key.\n * @returns The value, or undefined if the list is empty.\n */\n public abstract rpop(key: string): Promise<string | undefined>;\n\n // ---------------------------------------------------------\n // Pub/Sub operations (for alepha/topic-redis)\n // ---------------------------------------------------------\n\n /**\n * Publish a message to a channel.\n *\n * @param channel The channel name.\n * @param message The message to publish.\n */\n public abstract publish(channel: string, message: string): Promise<void>;\n}\n\n/**\n * Common Redis SET command options.\n * Compatible with @redis/client SetOptions format.\n */\nexport interface RedisSetOptions {\n /**\n * Set the specified expire time, in seconds.\n */\n EX?: number;\n /**\n * Set the specified expire time, in milliseconds.\n */\n PX?: number;\n /**\n * Set the specified Unix time at which the key will expire, in seconds.\n */\n EXAT?: number;\n /**\n * Set the specified Unix time at which the key will expire, in milliseconds.\n */\n PXAT?: number;\n /**\n * Only set the key if it does not already exist.\n */\n NX?: boolean;\n /**\n * Only set the key if it already exists.\n */\n XX?: boolean;\n /**\n * Retain the time to live associated with the key.\n */\n KEEPTTL?: boolean;\n /**\n * Return the old string stored at key, or nil if key did not exist.\n */\n GET?: boolean;\n /**\n * Alternative expiration format (compatible with @redis/client).\n */\n expiration?: {\n type: \"EX\" | \"PX\" | \"EXAT\" | \"PXAT\" | \"KEEPTTL\";\n value: number;\n };\n /**\n * Alternative condition format (compatible with @redis/client).\n */\n condition?: \"NX\" | \"XX\";\n}\n","import {\n $env,\n $hook,\n $inject,\n Alepha,\n AlephaError,\n type Static,\n t,\n} from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { RedisProvider, type RedisSetOptions } from \"./RedisProvider.ts\";\n\nconst envSchema = t.object({\n REDIS_URL: t.text({\n default: \"redis://localhost:6379\",\n description: \"Redis connection URL\",\n }),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof envSchema>> {}\n}\n\n/**\n * Bun Redis client provider using Bun's native Redis client.\n *\n * This provider uses Bun's built-in `RedisClient` class for Redis connections,\n * which provides excellent performance (7.9x faster than ioredis) on the Bun runtime.\n *\n * @example\n * ```ts\n * // Set REDIS_URL environment variable (default: redis://localhost:6379)\n * // REDIS_URL=redis://:password@myredis.example.com:6379\n *\n * // Or configure programmatically\n * alepha.with({\n * provide: RedisProvider,\n * use: BunRedisProvider,\n * });\n * ```\n */\nexport class BunRedisProvider extends RedisProvider {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly env = $env(envSchema);\n protected client?: Bun.RedisClient;\n\n public get publisher(): Bun.RedisClient {\n if (!this.client?.connected) {\n throw new AlephaError(\"Redis client is not ready\");\n }\n\n return this.client;\n }\n\n public override get isReady(): boolean {\n return this.client?.connected ?? false;\n }\n\n protected readonly start = $hook({\n on: \"start\",\n handler: () => this.connect(),\n });\n\n protected readonly stop = $hook({\n on: \"stop\",\n handler: () => this.close(),\n });\n\n /**\n * Connect to the Redis server.\n */\n public override async connect(): Promise<void> {\n // Check if we're running in Bun\n if (!this.alepha.isBun()) {\n throw new AlephaError(\n \"BunRedisProvider requires the Bun runtime. Use NodeRedisProvider for Node.js.\",\n );\n }\n\n this.log.debug(\"Connecting...\");\n\n this.client = new Bun.RedisClient(this.getUrl(), {\n autoReconnect: true,\n enableAutoPipelining: true,\n });\n\n this.client.onconnect = () => {\n this.log.trace(\"Redis connected\");\n };\n\n this.client.onclose = (error) => {\n if (this.alepha.isStarted() && error) {\n this.log.error(\"Redis connection closed\", error);\n }\n };\n\n await this.client.connect();\n\n this.log.info(\"Connection OK\");\n }\n\n /**\n * Close the connection to the Redis server.\n */\n public override async close(): Promise<void> {\n if (this.client) {\n this.log.debug(\"Closing connection...\");\n this.client.close();\n this.client = undefined;\n this.log.info(\"Connection closed\");\n }\n }\n\n /**\n * Create a duplicate connection for pub/sub or other isolated operations.\n */\n public async duplicate(): Promise<Bun.RedisClient> {\n if (typeof Bun === \"undefined\") {\n throw new AlephaError(\"BunRedisProvider requires the Bun runtime.\");\n }\n\n const client = new Bun.RedisClient(this.getUrl(), {\n autoReconnect: true,\n enableAutoPipelining: true,\n });\n\n client.onclose = (error) => {\n if (this.alepha.isStarted() && error) {\n this.log.error(\"Redis duplicate connection closed\", error);\n }\n };\n\n await client.connect();\n\n return client;\n }\n\n public override async get(key: string): Promise<Buffer | undefined> {\n this.log.trace(`Getting key ${key}`);\n const resp = await this.publisher.getBuffer(key);\n\n if (resp === null) {\n return undefined;\n }\n\n return Buffer.from(resp);\n }\n\n public override async set(\n key: string,\n value: Buffer | string,\n options?: RedisSetOptions,\n ): Promise<Buffer> {\n const buf = Buffer.isBuffer(value) ? value : Buffer.from(value, \"utf-8\");\n\n // Build SET command arguments\n const args: string[] = [key, buf.toString(\"binary\")];\n\n // Handle expiration object format (from alepha/cache-redis, alepha/lock-redis)\n if (options?.expiration) {\n if (options.expiration.type === \"KEEPTTL\") {\n args.push(\"KEEPTTL\");\n } else {\n args.push(options.expiration.type, String(options.expiration.value));\n }\n }\n\n // Handle direct expiration properties\n if (options?.EX !== undefined) {\n args.push(\"EX\", String(options.EX));\n }\n if (options?.PX !== undefined) {\n args.push(\"PX\", String(options.PX));\n }\n if (options?.EXAT !== undefined) {\n args.push(\"EXAT\", String(options.EXAT));\n }\n if (options?.PXAT !== undefined) {\n args.push(\"PXAT\", String(options.PXAT));\n }\n if (options?.KEEPTTL) {\n args.push(\"KEEPTTL\");\n }\n\n // Handle condition object format\n if (options?.condition === \"NX\") {\n args.push(\"NX\");\n } else if (options?.condition === \"XX\") {\n args.push(\"XX\");\n }\n\n // Handle direct condition properties\n if (options?.NX) {\n args.push(\"NX\");\n }\n if (options?.XX) {\n args.push(\"XX\");\n }\n if (options?.GET) {\n args.push(\"GET\");\n }\n\n if (args.length === 2) {\n // Simple set without options\n await this.publisher.set(key, buf);\n } else {\n // Set with options via raw command\n await this.publisher.send(\"SET\", args);\n }\n\n return buf;\n }\n\n public override async has(key: string): Promise<boolean> {\n return this.publisher.exists(key);\n }\n\n public override async keys(pattern: string): Promise<string[]> {\n const keys = await this.publisher.send(\"KEYS\", [pattern]);\n if (!Array.isArray(keys)) {\n return [];\n }\n return keys.map((key) =>\n key instanceof Uint8Array ? Buffer.from(key).toString() : String(key),\n );\n }\n\n public override async del(keys: string[]): Promise<void> {\n if (keys.length === 0) {\n return;\n }\n\n await this.publisher.send(\"DEL\", keys);\n }\n\n // ---------------------------------------------------------\n // Queue operations\n // ---------------------------------------------------------\n\n public override async lpush(key: string, value: string): Promise<void> {\n await this.publisher.send(\"LPUSH\", [key, value]);\n }\n\n public override async rpop(key: string): Promise<string | undefined> {\n const value = await this.publisher.send(\"RPOP\", [key]);\n if (value == null) {\n return undefined;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value).toString();\n }\n return String(value);\n }\n\n // ---------------------------------------------------------\n // Pub/Sub operations\n // ---------------------------------------------------------\n\n public override async publish(\n channel: string,\n message: string,\n ): Promise<void> {\n await this.publisher.publish(channel, message);\n }\n\n /**\n * Get the Redis connection URL.\n */\n protected getUrl(): string {\n return this.env.REDIS_URL;\n }\n}\n","/**\n * Abstract Redis subscriber provider interface.\n *\n * This abstract class defines the common interface for Redis pub/sub subscriptions.\n * Implementations include:\n * - {@link NodeRedisSubscriberProvider} - Uses `@redis/client` for Node.js runtime\n * - {@link BunRedisSubscriberProvider} - Uses Bun's native `RedisClient` for Bun runtime\n *\n * Redis requires separate connections for pub/sub operations, so this provider\n * creates a dedicated connection for subscriptions.\n *\n * @example\n * ```ts\n * // Inject the abstract provider - runtime selects the implementation\n * const subscriber = alepha.inject(RedisSubscriberProvider);\n *\n * // Subscribe to a channel\n * await subscriber.subscribe(\"my-channel\", (message, channel) => {\n * console.log(`Received: ${message} on ${channel}`);\n * });\n * ```\n */\nexport abstract class RedisSubscriberProvider {\n /**\n * Whether the Redis subscriber client is ready to accept commands.\n */\n public abstract readonly isReady: boolean;\n\n /**\n * Connect to the Redis server for subscriptions.\n */\n public abstract connect(): Promise<void>;\n\n /**\n * Close the subscriber connection.\n */\n public abstract close(): Promise<void>;\n\n /**\n * Subscribe to a channel.\n *\n * @param channel The channel name.\n * @param callback The callback to invoke when a message is received.\n */\n public abstract subscribe(\n channel: string,\n callback: SubscribeCallback,\n ): Promise<void>;\n\n /**\n * Unsubscribe from a channel.\n *\n * @param channel The channel name.\n * @param callback Optional specific callback to remove.\n */\n public abstract unsubscribe(\n channel: string,\n callback?: SubscribeCallback,\n ): Promise<void>;\n}\n\n/**\n * Callback for subscription messages.\n */\nexport type SubscribeCallback = (message: string, channel: string) => void;\n","import { $hook, $inject, Alepha, AlephaError } from \"alepha\";\nimport { $logger } from \"alepha/logger\";\nimport { BunRedisProvider } from \"./BunRedisProvider.ts\";\nimport {\n RedisSubscriberProvider,\n type SubscribeCallback,\n} from \"./RedisSubscriberProvider.ts\";\n\n/**\n * Bun Redis subscriber provider for pub/sub operations.\n *\n * This provider creates a dedicated Redis connection for subscriptions,\n * as Redis requires separate connections for pub/sub operations.\n *\n * @example\n * ```ts\n * const subscriber = alepha.inject(RedisSubscriberProvider);\n * await subscriber.subscribe(\"channel\", (message, channel) => {\n * console.log(`Received: ${message} on ${channel}`);\n * });\n * ```\n */\nexport class BunRedisSubscriberProvider extends RedisSubscriberProvider {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly redisProvider = $inject(BunRedisProvider);\n protected client?: Bun.RedisClient;\n\n public get subscriber(): Bun.RedisClient {\n if (!this.client?.connected) {\n throw new AlephaError(\"Redis subscriber client is not ready\");\n }\n\n return this.client;\n }\n\n public override get isReady(): boolean {\n return this.client?.connected ?? false;\n }\n\n protected readonly start = $hook({\n on: \"start\",\n handler: () => this.connect(),\n });\n\n protected readonly stop = $hook({\n on: \"stop\",\n handler: () => this.close(),\n });\n\n /**\n * Connect to the Redis server for subscriptions.\n */\n public override async connect(): Promise<void> {\n this.log.debug(\"Connecting subscriber...\");\n this.client = await this.redisProvider.duplicate();\n this.log.info(\"Subscriber connection OK\");\n }\n\n /**\n * Close the subscriber connection.\n */\n public override async close(): Promise<void> {\n if (this.client) {\n this.log.debug(\"Closing subscriber connection...\");\n this.client.close();\n this.client = undefined;\n this.log.info(\"Subscriber connection closed\");\n }\n }\n\n public override async subscribe(\n channel: string,\n callback: SubscribeCallback,\n ): Promise<void> {\n await this.subscriber.subscribe(channel, (message, ch) => {\n // Bun's callback provides Buffer or string, normalize to string\n const msg =\n typeof message === \"object\" && message !== null\n ? Buffer.from(message as Uint8Array).toString()\n : String(message);\n callback(msg, ch);\n });\n }\n\n public override async unsubscribe(\n channel: string,\n _callback?: SubscribeCallback,\n ): Promise<void> {\n // Bun's unsubscribe doesn't support callback filtering\n await this.subscriber.unsubscribe(channel);\n }\n}\n","import { $module, type Alepha } from \"alepha\";\nimport { BunRedisProvider } from \"./providers/BunRedisProvider.ts\";\nimport { BunRedisSubscriberProvider } from \"./providers/BunRedisSubscriberProvider.ts\";\nimport { RedisProvider } from \"./providers/RedisProvider.ts\";\nimport { RedisSubscriberProvider } from \"./providers/RedisSubscriberProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/BunRedisProvider.ts\";\nexport * from \"./providers/BunRedisSubscriberProvider.ts\";\nexport * from \"./providers/RedisProvider.ts\";\nexport * from \"./providers/RedisSubscriberProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const AlephaRedis = $module({\n name: \"alepha.redis\",\n services: [\n BunRedisProvider,\n BunRedisSubscriberProvider,\n RedisProvider,\n RedisSubscriberProvider,\n ],\n register: (alepha: Alepha) => {\n alepha\n .with({\n provide: RedisProvider,\n use: BunRedisProvider,\n })\n .with({\n provide: RedisSubscriberProvider,\n use: BunRedisSubscriberProvider,\n });\n },\n});\n"],"mappings":"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"}
|
package/dist/redis/index.d.ts
CHANGED
|
@@ -2,10 +2,8 @@ import * as alepha1 from "alepha";
|
|
|
2
2
|
import { Alepha, Static } from "alepha";
|
|
3
3
|
import * as alepha_logger0 from "alepha/logger";
|
|
4
4
|
import { RedisClientType, createClient } from "@redis/client";
|
|
5
|
-
import { RedisClient } from "bun";
|
|
6
5
|
|
|
7
6
|
//#region ../../src/redis/providers/RedisProvider.d.ts
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* Abstract Redis provider interface.
|
|
11
9
|
*
|
|
@@ -147,10 +145,7 @@ interface RedisSetOptions {
|
|
|
147
145
|
//#endregion
|
|
148
146
|
//#region ../../src/redis/providers/BunRedisProvider.d.ts
|
|
149
147
|
declare const envSchema$1: alepha1.TObject<{
|
|
150
|
-
REDIS_URL: alepha1.
|
|
151
|
-
REDIS_PORT: alepha1.TInteger;
|
|
152
|
-
REDIS_HOST: alepha1.TString;
|
|
153
|
-
REDIS_PASSWORD: alepha1.TOptional<alepha1.TString>;
|
|
148
|
+
REDIS_URL: alepha1.TString;
|
|
154
149
|
}>;
|
|
155
150
|
declare module "alepha" {
|
|
156
151
|
interface Env extends Partial<Static<typeof envSchema$1>> {}
|
|
@@ -163,10 +158,8 @@ declare module "alepha" {
|
|
|
163
158
|
*
|
|
164
159
|
* @example
|
|
165
160
|
* ```ts
|
|
166
|
-
* // Set REDIS_URL environment variable
|
|
167
|
-
* // REDIS_URL=redis
|
|
168
|
-
*
|
|
169
|
-
* // Or configure via REDIS_HOST, REDIS_PORT, REDIS_PASSWORD
|
|
161
|
+
* // Set REDIS_URL environment variable (default: redis://localhost:6379)
|
|
162
|
+
* // REDIS_URL=redis://:password@myredis.example.com:6379
|
|
170
163
|
*
|
|
171
164
|
* // Or configure programmatically
|
|
172
165
|
* alepha.with({
|
|
@@ -179,13 +172,10 @@ declare class BunRedisProvider extends RedisProvider {
|
|
|
179
172
|
protected readonly log: alepha_logger0.Logger;
|
|
180
173
|
protected readonly alepha: Alepha;
|
|
181
174
|
protected readonly env: {
|
|
182
|
-
REDIS_URL
|
|
183
|
-
REDIS_PASSWORD?: string | undefined;
|
|
184
|
-
REDIS_PORT: number;
|
|
185
|
-
REDIS_HOST: string;
|
|
175
|
+
REDIS_URL: string;
|
|
186
176
|
};
|
|
187
|
-
protected client?: RedisClient;
|
|
188
|
-
get publisher(): RedisClient;
|
|
177
|
+
protected client?: Bun.RedisClient;
|
|
178
|
+
get publisher(): Bun.RedisClient;
|
|
189
179
|
get isReady(): boolean;
|
|
190
180
|
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
191
181
|
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
@@ -200,7 +190,7 @@ declare class BunRedisProvider extends RedisProvider {
|
|
|
200
190
|
/**
|
|
201
191
|
* Create a duplicate connection for pub/sub or other isolated operations.
|
|
202
192
|
*/
|
|
203
|
-
duplicate(): Promise<RedisClient>;
|
|
193
|
+
duplicate(): Promise<Bun.RedisClient>;
|
|
204
194
|
get(key: string): Promise<Buffer | undefined>;
|
|
205
195
|
set(key: string, value: Buffer | string, options?: RedisSetOptions): Promise<Buffer>;
|
|
206
196
|
has(key: string): Promise<boolean>;
|
|
@@ -290,8 +280,8 @@ declare class BunRedisSubscriberProvider extends RedisSubscriberProvider {
|
|
|
290
280
|
protected readonly log: alepha_logger0.Logger;
|
|
291
281
|
protected readonly alepha: Alepha;
|
|
292
282
|
protected readonly redisProvider: BunRedisProvider;
|
|
293
|
-
protected client?: RedisClient;
|
|
294
|
-
get subscriber(): RedisClient;
|
|
283
|
+
protected client?: Bun.RedisClient;
|
|
284
|
+
get subscriber(): Bun.RedisClient;
|
|
295
285
|
get isReady(): boolean;
|
|
296
286
|
protected readonly start: alepha1.HookPrimitive<"start">;
|
|
297
287
|
protected readonly stop: alepha1.HookPrimitive<"stop">;
|
|
@@ -309,10 +299,7 @@ declare class BunRedisSubscriberProvider extends RedisSubscriberProvider {
|
|
|
309
299
|
//#endregion
|
|
310
300
|
//#region ../../src/redis/providers/NodeRedisProvider.d.ts
|
|
311
301
|
declare const envSchema: alepha1.TObject<{
|
|
312
|
-
REDIS_URL: alepha1.
|
|
313
|
-
REDIS_PORT: alepha1.TInteger;
|
|
314
|
-
REDIS_HOST: alepha1.TString;
|
|
315
|
-
REDIS_PASSWORD: alepha1.TOptional<alepha1.TString>;
|
|
302
|
+
REDIS_URL: alepha1.TString;
|
|
316
303
|
}>;
|
|
317
304
|
declare module "alepha" {
|
|
318
305
|
interface Env extends Partial<Static<typeof envSchema>> {}
|
|
@@ -328,10 +315,8 @@ type NodeRedisClientOptions = Parameters<typeof createClient>[0];
|
|
|
328
315
|
*
|
|
329
316
|
* @example
|
|
330
317
|
* ```ts
|
|
331
|
-
* // Set REDIS_URL environment variable
|
|
332
|
-
* // REDIS_URL=redis
|
|
333
|
-
*
|
|
334
|
-
* // Or configure via REDIS_HOST, REDIS_PORT, REDIS_PASSWORD
|
|
318
|
+
* // Set REDIS_URL environment variable (default: redis://localhost:6379)
|
|
319
|
+
* // REDIS_URL=redis://:password@myredis.example.com:6379
|
|
335
320
|
*
|
|
336
321
|
* // Or configure programmatically
|
|
337
322
|
* alepha.with({
|
|
@@ -344,10 +329,7 @@ declare class NodeRedisProvider extends RedisProvider {
|
|
|
344
329
|
protected readonly log: alepha_logger0.Logger;
|
|
345
330
|
protected readonly alepha: Alepha;
|
|
346
331
|
protected readonly env: {
|
|
347
|
-
REDIS_URL
|
|
348
|
-
REDIS_PASSWORD?: string | undefined;
|
|
349
|
-
REDIS_PORT: number;
|
|
350
|
-
REDIS_HOST: string;
|
|
332
|
+
REDIS_URL: string;
|
|
351
333
|
};
|
|
352
334
|
protected readonly client: NodeRedisClient;
|
|
353
335
|
get publisher(): NodeRedisClient;
|
|
@@ -1 +1 @@
|
|
|
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"],"
|
|
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"],"mappings":";;;;;;;;;;;;AAkBA;;;;;;;;;;;;uBAAsB,aAAA;EA2DiB;;;EAAA,kBAvDZ,OAAA;EAuFyC;;;EAAA,SAlFlD,OAAA,CAAA,GAAW,OAAA;EAAA;;;EAAA,SAKX,KAAA,CAAA,GAAS,OAAA;EAQL;;;;;;EAAA,SAAJ,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,MAAA;EAa9B;;;;;;;;EAAA,SAHI,GAAA,CACd,GAAA,UACA,KAAA,EAAO,MAAA,WACP,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,MAAA;EAgB4B;;;;;;EAAA,SARvB,GAAA,CAAI,GAAA,WAAc,OAAA;EA2BiB;;;;;;EAAA,SAnBnC,IAAA,CAAK,OAAA,WAAkB,OAAA;EAuCoB;;;AAO7D;;EAP6D,SAhC3C,GAAA,CAAI,IAAA,aAAiB,OAAA;EAuCP;;;;;;EAAA,SA3Bd,KAAA,CAAM,GAAA,UAAa,KAAA,WAAgB,OAAA;EAuDnD;;;;;;EAAA,SA/CgB,IAAA,CAAK,GAAA,WAAc,OAAA;EA8D1B;;;;ACrJ8D;;EDqJ9D,SAlDO,OAAA,CAAQ,OAAA,UAAiB,OAAA,WAAkB,OAAA;AAAA;;;;;UAO5C,eAAA;;;;EAIf,EAAA;ECpG8B;;;EDwG9B,EAAA;ECxGU;;;ED4GV,IAAA;EC5GqD;;;EDgHrD,IAAA;EC3F4B;;;ED+F5B,EAAA;EC3FmB;;;ED+FnB,EAAA;ECpEiC;;;EDwEjC,OAAA;ECNgD;;;EDUhD,GAAA;ECKW;;;EDDX,UAAA;IACE,IAAA;IACA,KAAA;EAAA;EC4GC;;;EDvGH,SAAA;AAAA;;;cCnJI,WAAA,EAKJ,OAAA,CALa,OAAA;aAKb,OAAA,CAAA,OAAA;AAAA;AAAA;EAAA,UAGU,GAAA,SAAY,OAAA,CAAQ,MAAA,QAAc,WAAA;AAAA;;;;;;;;;;;;;;;;;;;cAqBjC,gBAAA,SAAyB,aAAA;EAAA,mBACjB,GAAA,EADS,cAAA,CACN,MAAA;EAAA,mBACH,MAAA,EAAM,MAAA;EAAA,mBACN,GAAA;;;YACT,MAAA,GAAS,GAAA,CAAI,WAAA;EAAA,IAEZ,SAAA,CAAA,GAAa,GAAA,CAAI,WAAA;EAAA,IAQR,OAAA,CAAA;EAAA,mBAID,KAAA,EAZoB,OAAA,CAYf,aAAA;EAAA,mBAKL,IAAA,EALK,OAAA,CAKD,aAAA;EDXX;;;ECmBU,OAAA,CAAA,GAAW,OAAA;EDVjB;;;EC2CM,KAAA,CAAA,GAAS,OAAA;EDnCV;;;EC+CR,SAAA,CAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,WAAA;EAqBhB,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,MAAA;EAW1B,GAAA,CACpB,GAAA,UACA,KAAA,EAAO,MAAA,WACP,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,MAAA;EA6DW,GAAA,CAAI,GAAA,WAAc,OAAA;EAIlB,IAAA,CAAK,OAAA,WAAkB,OAAA;EAUvB,GAAA,CAAI,IAAA,aAAiB,OAAA;EAYrB,KAAA,CAAM,GAAA,UAAa,KAAA,WAAgB,OAAA;EAInC,IAAA,CAAK,GAAA,WAAc,OAAA;EAenB,OAAA,CACpB,OAAA,UACA,OAAA,WACC,OAAA;EDzJa;;;EAAA,UCgKN,MAAA,CAAA;AAAA;;;;;;;;;AD3PZ;;;;;;;;;;;;;;;;uBEIsB,uBAAA;EFuF8C;;;EAAA,kBEnFzC,OAAA;EFCE;;;EAAA,SEIX,OAAA,CAAA,GAAW,OAAA;EFSP;;;EAAA,SEJJ,KAAA,CAAA,GAAS,OAAA;EFevB;;;;;;EAAA,SEPc,SAAA,CACd,OAAA,UACA,QAAA,EAAU,iBAAA,GACT,OAAA;EFea;;;;;;EAAA,SEPA,WAAA,CACd,OAAA,UACA,QAAA,GAAW,iBAAA,GACV,OAAA;AAAA;;;;KAMO,iBAAA,IAAqB,OAAA,UAAiB,OAAA;;;;;;AF9ClD;;;;;;;;;;;cGIa,0BAAA,SAAmC,uBAAA;EAAA,mBAC3B,GAAA,EADmB,cAAA,CAChB,MAAA;EAAA,mBACH,MAAA,EAAM,MAAA;EAAA,mBACN,aAAA,EAAa,gBAAA;EAAA,UACtB,MAAA,GAAS,GAAA,CAAI,WAAA;EAAA,IAEZ,UAAA,CAAA,GAAc,GAAA,CAAI,WAAA;EAAA,IAQT,OAAA,CAAA;EAAA,mBAID,KAAA,EAZqB,OAAA,CAYhB,aAAA;EAAA,mBAKL,IAAA,EALK,OAAA,CAKD,aAAA;EHlBP;;;EG0BM,OAAA,CAAA,GAAW,OAAA;EHbjB;;;EGsBM,KAAA,CAAA,GAAS,OAAA;EAST,SAAA,CACpB,OAAA,UACA,QAAA,EAAU,iBAAA,GACT,OAAA;EAWmB,WAAA,CACpB,OAAA,UACA,SAAA,GAAY,iBAAA,GACX,OAAA;AAAA;;;cCtEC,SAAA,EAKJ,OAAA,CALa,OAAA;aAKb,OAAA,CAAA,OAAA;AAAA;AAAA;EAAA,UAGU,GAAA,SAAY,OAAA,CAAQ,MAAA,QAAc,SAAA;AAAA;AAAA,KAGlC,eAAA,GAAkB,eAAA;EAK1B,EAAA,EAAI,iBAAA;AAAA;AAAA,KAEI,sBAAA,GAAyB,UAAA,QAAkB,YAAA;;;;;;;;;;;;;;;;;;cAmB1C,iBAAA,SAA0B,aAAA;EAAA,mBAClB,GAAA,EADU,cAAA,CACP,MAAA;EAAA,mBACH,MAAA,EAAM,MAAA;EAAA,mBACN,GAAA;;;qBACA,MAAA,EAAM,eAAA;EAAA,IAEd,SAAA,CAAA,GAAa,eAAA;EAAA,IAQJ,OAAA,CAAA;EAAA,mBAID,KAAA,EAZoB,OAAA,CAYf,aAAA;EAAA,mBAKL,IAAA,EALK,OAAA,CAKD,aAAA;EJhBP;;;EIwBM,OAAA,CAAA,GAAW,OAAA;EJhBZ;;;EIyBC,KAAA,CAAA,GAAS,OAAA;EAMxB,SAAA,CAAU,OAAA,GAAU,OAAA,CAAQ,sBAAA,IAA0B,eAAA;EAWvC,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,MAAA;EAW1B,GAAA,CACpB,GAAA,UACA,KAAA,EAAO,MAAA,WACP,OAAA,GAAU,eAAA,GACT,OAAA,CAAQ,MAAA;EA+DW,GAAA,CAAI,GAAA,WAAc,OAAA;EAKlB,IAAA,CAAK,OAAA,WAAkB,OAAA;EAKvB,GAAA,CAAI,IAAA,aAAiB,OAAA;EAYrB,KAAA,CAAM,GAAA,UAAa,KAAA,WAAgB,OAAA;EAInC,IAAA,CAAK,GAAA,WAAc,OAAA;EAYnB,OAAA,CACpB,OAAA,UACA,OAAA,WACC,OAAA;EJ1HqB;;;EAAA,UIiId,MAAA,CAAA;EJjIwD;AAOpE;;EAPoE,UIwIxD,YAAA,CAAA,GAAgB,eAAA;AAAA;;;;;;AJnO5B;;;;;;;;;;;cKOa,2BAAA,SAAoC,uBAAA;EAAA,mBAC5B,GAAA,EADoB,cAAA,CACjB,MAAA;EAAA,mBACH,MAAA,EAAM,MAAA;EAAA,mBACN,aAAA,EAAa,iBAAA;EAAA,mBACb,MAAA,EAAQ,eAAA;EAAA,IAEhB,UAAA,CAAA,GAAc,eAAA;EAAA,IAQL,OAAA,CAAA;EAAA,mBAID,KAAA,EAZqB,OAAA,CAYhB,aAAA;EAAA,mBAKL,IAAA,EALK,OAAA,CAKD,aAAA;EAKD,OAAA,CAAA,GAAW,OAAA;EAMX,KAAA,CAAA,GAAS,OAAA;EAMT,SAAA,CACpB,OAAA,UACA,QAAA,EAAU,iBAAA,GACT,OAAA;EAImB,WAAA,CACpB,OAAA,UACA,QAAA,GAAW,iBAAA,GACV,OAAA;ELnCa;;;EAAA,UK0CN,YAAA,CAAA,GAAgB,eAAA;AAAA;;;ALhE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cMgCa,WAAA,EAAW,OAAA,CAAA,OAAA,CAiCtB,OAAA,CAjCsB,MAAA"}
|