alepha 0.14.3 → 0.15.0
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 +2 -5
- package/dist/api/audits/index.d.ts +620 -811
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/files/index.d.ts +185 -377
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +0 -1
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +245 -435
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/notifications/index.d.ts +238 -429
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/parameters/index.d.ts +236 -427
- 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 +1010 -1196
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +178 -151
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +17 -17
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts +122 -122
- 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 +163 -163
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/cache/core/index.d.ts +46 -46
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cli/index.d.ts +384 -285
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1113 -623
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +299 -300
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +13 -9
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +445 -103
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +733 -625
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +446 -103
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +445 -103
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +44 -44
- 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 +97 -50
- 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 +7981 -14
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/file/index.d.ts +523 -390
- 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 +208 -208
- 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 +25 -26
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +12 -2
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +197 -197
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/chunk-DtkW-qnP.js +38 -0
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +2814 -0
- package/dist/orm/index.bun.js.map +1 -0
- package/dist/orm/index.d.ts +1228 -1216
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +2041 -1967
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +248 -248
- 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 +118 -136
- 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 +69 -69
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/router/index.d.ts +6 -6
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +25 -25
- package/dist/scheduler/index.d.ts.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 +417 -254
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +386 -86
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +110 -110
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +20 -20
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +62 -47
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +56 -3
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts +6 -0
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/compress/index.js +36 -1
- package/dist/server/compress/index.js.map +1 -1
- package/dist/server/cookies/index.d.ts +6 -6
- 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.browser.js +2 -2
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +242 -150
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +294 -125
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +11 -12
- 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 +2 -2
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +123 -124
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +1 -2
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/multipart/index.d.ts +6 -6
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +102 -103
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts +16 -16
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts +44 -44
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js +4 -0
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +48 -49
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +3 -5
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +13 -11
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +7 -7
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +71 -72
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/topic/core/index.d.ts +318 -318
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts +6 -6
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +5805 -249
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +599 -513
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +6 -6
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +247 -247
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +6 -6
- package/dist/websocket/index.js.map +1 -1
- package/package.json +9 -14
- 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 +28 -9
- package/src/api/users/services/UserService.ts +7 -7
- package/src/batch/providers/BatchProvider.ts +1 -2
- package/src/cli/apps/AlephaCli.ts +0 -2
- package/src/cli/apps/AlephaPackageBuilderCli.ts +38 -19
- package/src/cli/assets/apiHelloControllerTs.ts +18 -0
- package/src/cli/assets/apiIndexTs.ts +16 -0
- package/src/cli/assets/claudeMd.ts +303 -0
- package/src/cli/assets/mainBrowserTs.ts +2 -2
- package/src/cli/assets/mainServerTs.ts +24 -0
- package/src/cli/assets/webAppRouterTs.ts +15 -0
- package/src/cli/assets/webHelloComponentTsx.ts +16 -0
- package/src/cli/assets/webIndexTs.ts +16 -0
- package/src/cli/atoms/buildOptions.ts +88 -0
- package/src/cli/commands/build.ts +70 -87
- package/src/cli/commands/db.ts +21 -22
- package/src/cli/commands/deploy.ts +17 -5
- package/src/cli/commands/dev.ts +22 -14
- package/src/cli/commands/format.ts +8 -2
- package/src/cli/commands/gen/env.ts +53 -0
- package/src/cli/commands/gen/openapi.ts +1 -1
- package/src/cli/commands/gen/resource.ts +15 -0
- package/src/cli/commands/gen.ts +7 -1
- package/src/cli/commands/init.ts +74 -30
- package/src/cli/commands/lint.ts +8 -2
- package/src/cli/commands/test.ts +8 -3
- package/src/cli/commands/typecheck.ts +5 -1
- package/src/cli/commands/verify.ts +5 -3
- package/src/cli/defineConfig.ts +49 -7
- package/src/cli/index.ts +0 -1
- package/src/cli/services/AlephaCliUtils.ts +39 -589
- package/src/cli/services/PackageManagerUtils.ts +301 -0
- package/src/cli/services/ProjectScaffolder.ts +306 -0
- package/src/command/helpers/Runner.spec.ts +2 -2
- package/src/command/helpers/Runner.ts +16 -4
- package/src/command/primitives/$command.ts +0 -6
- package/src/command/providers/CliProvider.ts +1 -3
- package/src/core/Alepha.ts +42 -0
- 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/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 +621 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +407 -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/index.ts +15 -3
- package/src/mcp/transports/StdioMcpTransport.ts +1 -1
- 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 +13 -39
- 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 +8 -0
- package/src/queue/core/providers/WorkerProvider.spec.ts +48 -32
- 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.spec.ts +183 -0
- package/src/server/cache/providers/ServerCacheProvider.ts +95 -10
- package/src/server/compress/providers/ServerCompressProvider.ts +61 -2
- package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
- package/src/server/core/helpers/ServerReply.ts +2 -2
- package/src/server/core/providers/NodeHttpServerProvider.ts +25 -6
- 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 +155 -22
- package/src/server/core/providers/ServerRouterProvider.ts +259 -115
- package/src/server/core/providers/ServerTimingProvider.ts +2 -2
- package/src/server/links/index.ts +1 -1
- package/src/server/links/providers/LinkProvider.ts +1 -1
- package/src/server/static/providers/ServerStaticProvider.ts +10 -0
- package/src/server/swagger/index.ts +1 -1
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +5 -8
- package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
- package/src/sms/providers/LocalSmsProvider.ts +8 -7
- package/src/vite/helpers/boot.ts +28 -17
- package/src/vite/helpers/importViteReact.ts +13 -0
- package/src/vite/index.ts +1 -21
- package/src/vite/plugins/viteAlephaDev.ts +16 -1
- package/src/vite/plugins/viteAlephaSsrPreload.ts +222 -0
- package/src/vite/tasks/buildClient.ts +11 -0
- package/src/vite/tasks/buildServer.ts +59 -4
- package/src/vite/tasks/devServer.ts +71 -0
- package/src/vite/tasks/generateCloudflare.ts +7 -0
- package/src/vite/tasks/index.ts +2 -1
- 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/mainTs.ts +0 -13
- package/src/cli/assets/viteConfigTs.ts +0 -14
- package/src/cli/commands/run.ts +0 -24
- package/src/server/security/index.browser.ts +0 -10
- package/src/server/security/index.ts +0 -94
- package/src/vite/plugins/viteAlepha.ts +0 -37
- package/src/vite/plugins/viteAlephaBuild.ts +0 -281
- /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
package/src/orm/index.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { $module, type Alepha, t } from "alepha";
|
|
2
2
|
import { AlephaDateTime } from "alepha/datetime";
|
|
3
|
-
import * as drizzle from "drizzle-orm";
|
|
4
3
|
import { $entity } from "./primitives/$entity.ts";
|
|
5
|
-
import { $repository } from "./primitives/$repository.ts";
|
|
6
4
|
import { $sequence } from "./primitives/$sequence.ts";
|
|
7
5
|
import { DrizzleKitProvider } from "./providers/DrizzleKitProvider.ts";
|
|
8
6
|
import { BunPostgresProvider } from "./providers/drivers/BunPostgresProvider.ts";
|
|
@@ -90,50 +88,21 @@ declare module "alepha" {
|
|
|
90
88
|
|
|
91
89
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
92
90
|
|
|
93
|
-
export
|
|
94
|
-
export {
|
|
95
|
-
type Page,
|
|
96
|
-
type PageQuery,
|
|
97
|
-
pageQuerySchema,
|
|
98
|
-
pageSchema,
|
|
99
|
-
} from "alepha";
|
|
100
|
-
export { sql } from "drizzle-orm";
|
|
101
|
-
export * from "drizzle-orm/pg-core";
|
|
102
|
-
export * from "./constants/PG_SYMBOLS.ts";
|
|
103
|
-
export * from "./errors/DbConflictError.ts";
|
|
104
|
-
export * from "./errors/DbEntityNotFoundError.ts";
|
|
105
|
-
export * from "./errors/DbError.ts";
|
|
106
|
-
export * from "./errors/DbMigrationError.ts";
|
|
107
|
-
export * from "./errors/DbVersionMismatchError.ts";
|
|
108
|
-
export * from "./helpers/parseQueryString.ts";
|
|
109
|
-
export * from "./helpers/pgAttr.ts";
|
|
110
|
-
export * from "./interfaces/FilterOperators.ts";
|
|
111
|
-
export * from "./interfaces/PgQuery.ts";
|
|
112
|
-
export * from "./interfaces/PgQueryWhere.ts";
|
|
113
|
-
export * from "./primitives/$entity.ts";
|
|
114
|
-
export * from "./primitives/$repository.ts";
|
|
115
|
-
export * from "./primitives/$sequence.ts";
|
|
116
|
-
export * from "./primitives/$transaction.ts";
|
|
117
|
-
export * from "./providers/DatabaseTypeProvider.ts";
|
|
118
|
-
export * from "./providers/DrizzleKitProvider.ts";
|
|
91
|
+
export * from "./index.shared-server.ts";
|
|
119
92
|
export * from "./providers/drivers/BunPostgresProvider.ts";
|
|
120
93
|
export * from "./providers/drivers/BunSqliteProvider.ts";
|
|
121
|
-
export * from "./providers/drivers/CloudflareD1Provider.ts";
|
|
122
|
-
export * from "./providers/drivers/DatabaseProvider.ts";
|
|
123
94
|
export * from "./providers/drivers/NodePostgresProvider.ts";
|
|
124
95
|
export * from "./providers/drivers/NodeSqliteProvider.ts";
|
|
125
|
-
export * from "./providers/RepositoryProvider.ts";
|
|
126
|
-
export * from "./schemas/insertSchema.ts";
|
|
127
|
-
export * from "./schemas/legacyIdSchema.ts";
|
|
128
|
-
export * from "./schemas/updateSchema.ts";
|
|
129
|
-
export * from "./services/Repository.ts";
|
|
130
|
-
export * from "./types/schema.ts";
|
|
131
96
|
|
|
132
97
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
133
98
|
|
|
134
99
|
/**
|
|
135
100
|
* Postgres client based on Drizzle ORM, Alepha type-safe friendly.
|
|
136
101
|
*
|
|
102
|
+
* Automatically selects the appropriate provider based on runtime:
|
|
103
|
+
* - Bun: Uses `BunPostgresProvider` or `BunSqliteProvider`
|
|
104
|
+
* - Node.js: Uses `NodePostgresProvider` or `NodeSqliteProvider`
|
|
105
|
+
*
|
|
137
106
|
* ```ts
|
|
138
107
|
* import { t } from "alepha";
|
|
139
108
|
* import { $entity, $repository, db } from "alepha/postgres";
|
|
@@ -172,6 +141,10 @@ export * from "./types/schema.ts";
|
|
|
172
141
|
* @see {@link $sequence}
|
|
173
142
|
* @see {@link $repository}
|
|
174
143
|
* @see {@link $transaction}
|
|
144
|
+
* @see {@link NodePostgresProvider} - Node.js Postgres implementation
|
|
145
|
+
* @see {@link NodeSqliteProvider} - Node.js SQLite implementation
|
|
146
|
+
* @see {@link BunPostgresProvider} - Bun Postgres implementation
|
|
147
|
+
* @see {@link BunSqliteProvider} - Bun SQLite implementation
|
|
175
148
|
* @module alepha.postgres
|
|
176
149
|
*/
|
|
177
150
|
export const AlephaPostgres = $module({
|
|
@@ -181,10 +154,10 @@ export const AlephaPostgres = $module({
|
|
|
181
154
|
AlephaDateTime,
|
|
182
155
|
DatabaseProvider,
|
|
183
156
|
NodePostgresProvider,
|
|
184
|
-
PglitePostgresProvider,
|
|
185
157
|
NodeSqliteProvider,
|
|
186
158
|
BunPostgresProvider,
|
|
187
159
|
BunSqliteProvider,
|
|
160
|
+
PglitePostgresProvider,
|
|
188
161
|
CloudflareD1Provider,
|
|
189
162
|
SqliteModelBuilder,
|
|
190
163
|
PostgresModelBuilder,
|
|
@@ -210,6 +183,7 @@ export const AlephaPostgres = $module({
|
|
|
210
183
|
const isSqlite = url?.startsWith("sqlite:");
|
|
211
184
|
const isMemory = url?.includes(":memory:");
|
|
212
185
|
const isFile = !!url && !isPostgres && !isMemory;
|
|
186
|
+
const isBun = alepha.isBun();
|
|
213
187
|
|
|
214
188
|
if (url?.startsWith("cloudflare-d1:")) {
|
|
215
189
|
alepha.with({
|
|
@@ -233,7 +207,7 @@ export const AlephaPostgres = $module({
|
|
|
233
207
|
alepha.with({
|
|
234
208
|
optional: true,
|
|
235
209
|
provide: DatabaseProvider,
|
|
236
|
-
use:
|
|
210
|
+
use: isBun ? BunPostgresProvider : NodePostgresProvider,
|
|
237
211
|
});
|
|
238
212
|
return;
|
|
239
213
|
}
|
|
@@ -241,7 +215,7 @@ export const AlephaPostgres = $module({
|
|
|
241
215
|
alepha.with({
|
|
242
216
|
optional: true,
|
|
243
217
|
provide: DatabaseProvider,
|
|
244
|
-
use:
|
|
218
|
+
use: isBun ? BunSqliteProvider : NodeSqliteProvider,
|
|
245
219
|
});
|
|
246
220
|
},
|
|
247
221
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { $env, $hook, $inject, AlephaError, type Static, t } from "alepha";
|
|
2
2
|
import { $lock } from "alepha/lock";
|
|
3
3
|
import { $logger } from "alepha/logger";
|
|
4
|
-
import type { SQL as BunSQL } from "bun";
|
|
5
4
|
import { sql } from "drizzle-orm";
|
|
6
5
|
import type { BunSQLDatabase } from "drizzle-orm/bun-sql";
|
|
7
6
|
import type { PgDatabase } from "drizzle-orm/pg-core";
|
|
@@ -55,13 +54,13 @@ export class BunPostgresProvider extends DatabaseProvider {
|
|
|
55
54
|
protected readonly kit = $inject(DrizzleKitProvider);
|
|
56
55
|
protected readonly builder = $inject(PostgresModelBuilder);
|
|
57
56
|
|
|
58
|
-
protected client?:
|
|
57
|
+
protected client?: Bun.SQL;
|
|
59
58
|
protected bunDb?: BunSQLDatabase;
|
|
60
59
|
|
|
61
60
|
public readonly dialect = "postgresql";
|
|
62
61
|
|
|
63
62
|
public get name() {
|
|
64
|
-
return "
|
|
63
|
+
return "postgres";
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
/**
|
|
@@ -184,10 +183,9 @@ export class BunPostgresProvider extends DatabaseProvider {
|
|
|
184
183
|
}
|
|
185
184
|
|
|
186
185
|
const { drizzle } = await import("drizzle-orm/bun-sql");
|
|
187
|
-
const { SQL } = await import("bun");
|
|
188
186
|
|
|
189
187
|
// Create Bun SQL client
|
|
190
|
-
this.client = new SQL(this.url);
|
|
188
|
+
this.client = new Bun.SQL(this.url);
|
|
191
189
|
|
|
192
190
|
// Test connection
|
|
193
191
|
await this.client.unsafe("SELECT 1");
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
t,
|
|
12
12
|
} from "alepha";
|
|
13
13
|
import { type DateTime, DateTimeProvider } from "alepha/datetime";
|
|
14
|
+
import { $logger } from "alepha/logger";
|
|
14
15
|
import { asc, desc, isSQLWrapper, type SQL } from "drizzle-orm";
|
|
15
16
|
import type {
|
|
16
17
|
LockConfig,
|
|
@@ -62,6 +63,7 @@ export abstract class Repository<T extends TObject> {
|
|
|
62
63
|
public readonly entity: EntityPrimitive<T>;
|
|
63
64
|
public readonly provider: DatabaseProvider;
|
|
64
65
|
|
|
66
|
+
protected readonly log = $logger();
|
|
65
67
|
protected readonly relationManager = $inject(PgRelationManager);
|
|
66
68
|
protected readonly queryManager = $inject(QueryManager);
|
|
67
69
|
protected readonly dateTimeProvider = $inject(DateTimeProvider);
|
|
@@ -200,6 +202,12 @@ export abstract class Repository<T extends TObject> {
|
|
|
200
202
|
) => Promise<T>,
|
|
201
203
|
config?: PgTransactionConfig,
|
|
202
204
|
): Promise<T> {
|
|
205
|
+
if (this.provider.driver === "pglite") {
|
|
206
|
+
this.log.warn("Transactions are not supported with pglite driver");
|
|
207
|
+
return await transaction(null as any);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
this.log.debug(`Starting transaction on table ${this.tableName}`);
|
|
203
211
|
return await this.db.transaction(transaction, config);
|
|
204
212
|
}
|
|
205
213
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Alepha, t } from "alepha";
|
|
2
|
+
import { $logger } from "alepha/logger";
|
|
2
3
|
import { describe, expect, test, vi } from "vitest";
|
|
3
4
|
import {
|
|
4
5
|
$consumer,
|
|
@@ -13,6 +14,16 @@ const payloadSchema = t.object({
|
|
|
13
14
|
count: t.integer(),
|
|
14
15
|
});
|
|
15
16
|
|
|
17
|
+
class TestWorkerProvider extends WorkerProvider {
|
|
18
|
+
public readonly log = $logger();
|
|
19
|
+
public workersRunning = 0;
|
|
20
|
+
public workerIntervals: Record<number, number> = {};
|
|
21
|
+
public abortController = new AbortController();
|
|
22
|
+
public waitForNextMessage(n: number): Promise<void> {
|
|
23
|
+
return super.waitForNextMessage(n);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
16
27
|
describe("WorkerProvider", () => {
|
|
17
28
|
const createTestApp = async (
|
|
18
29
|
options: {
|
|
@@ -29,6 +40,11 @@ describe("WorkerProvider", () => {
|
|
|
29
40
|
},
|
|
30
41
|
});
|
|
31
42
|
|
|
43
|
+
app.with({
|
|
44
|
+
provide: WorkerProvider,
|
|
45
|
+
use: TestWorkerProvider,
|
|
46
|
+
});
|
|
47
|
+
|
|
32
48
|
app.with({
|
|
33
49
|
provide: QueueProvider,
|
|
34
50
|
use: MemoryQueueProvider,
|
|
@@ -52,16 +68,16 @@ describe("WorkerProvider", () => {
|
|
|
52
68
|
const app = await createTestApp();
|
|
53
69
|
app.with(TestService);
|
|
54
70
|
|
|
55
|
-
const workerProvider = app.inject(
|
|
56
|
-
const logSpy = vi.spyOn(workerProvider
|
|
71
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
72
|
+
const logSpy = vi.spyOn(workerProvider.log, "debug");
|
|
57
73
|
|
|
58
74
|
await app.start();
|
|
59
75
|
|
|
60
76
|
expect(logSpy).toHaveBeenCalledWith("Starting worker n-0");
|
|
61
|
-
expect(workerProvider
|
|
77
|
+
expect(workerProvider.workersRunning).toBe(1);
|
|
62
78
|
|
|
63
79
|
await app.stop();
|
|
64
|
-
expect(workerProvider
|
|
80
|
+
expect(workerProvider.workersRunning).toBe(0);
|
|
65
81
|
});
|
|
66
82
|
|
|
67
83
|
test("should start multiple workers with concurrency", async () => {
|
|
@@ -76,32 +92,32 @@ describe("WorkerProvider", () => {
|
|
|
76
92
|
const app = await createTestApp({ workerConcurrency: 3 });
|
|
77
93
|
app.with(TestService);
|
|
78
94
|
|
|
79
|
-
const workerProvider = app.inject(
|
|
80
|
-
const logSpy = vi.spyOn(workerProvider
|
|
95
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
96
|
+
const logSpy = vi.spyOn(workerProvider.log, "debug");
|
|
81
97
|
|
|
82
98
|
await app.start();
|
|
83
99
|
|
|
84
100
|
expect(logSpy).toHaveBeenCalledWith("Starting worker n-0");
|
|
85
101
|
expect(logSpy).toHaveBeenCalledWith("Starting worker n-1");
|
|
86
102
|
expect(logSpy).toHaveBeenCalledWith("Starting worker n-2");
|
|
87
|
-
expect(workerProvider
|
|
103
|
+
expect(workerProvider.workersRunning).toBe(3);
|
|
88
104
|
|
|
89
105
|
await app.stop();
|
|
90
|
-
expect(workerProvider
|
|
106
|
+
expect(workerProvider.workersRunning).toBe(0);
|
|
91
107
|
});
|
|
92
108
|
|
|
93
109
|
test("should not start workers when no consumers", async () => {
|
|
94
110
|
const app = await createTestApp();
|
|
95
111
|
|
|
96
|
-
const workerProvider = app.inject(
|
|
97
|
-
const logSpy = vi.spyOn(workerProvider
|
|
112
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
113
|
+
const logSpy = vi.spyOn(workerProvider.log, "debug");
|
|
98
114
|
|
|
99
115
|
await app.start();
|
|
100
116
|
|
|
101
117
|
expect(logSpy).not.toHaveBeenCalledWith(
|
|
102
118
|
expect.stringMatching(/Starting worker/),
|
|
103
119
|
);
|
|
104
|
-
expect(workerProvider
|
|
120
|
+
expect(workerProvider.workersRunning).toBe(0);
|
|
105
121
|
|
|
106
122
|
await app.stop();
|
|
107
123
|
});
|
|
@@ -120,20 +136,20 @@ describe("WorkerProvider", () => {
|
|
|
120
136
|
const app = await createTestApp({ workerConcurrency: 2 });
|
|
121
137
|
app.with(TestService);
|
|
122
138
|
|
|
123
|
-
const workerProvider = app.inject(
|
|
124
|
-
const debugSpy = vi.spyOn(workerProvider
|
|
139
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
140
|
+
const debugSpy = vi.spyOn(workerProvider.log, "debug");
|
|
125
141
|
|
|
126
142
|
await app.start();
|
|
127
|
-
expect(workerProvider
|
|
143
|
+
expect(workerProvider.workersRunning).toBe(2);
|
|
128
144
|
|
|
129
145
|
// Simulate worker crash by manually decrementing counter
|
|
130
|
-
workerProvider
|
|
146
|
+
workerProvider.workersRunning = 1;
|
|
131
147
|
|
|
132
148
|
// Call wakeUp - should detect missing worker and restart it
|
|
133
149
|
workerProvider.wakeUp();
|
|
134
150
|
|
|
135
151
|
expect(debugSpy).toHaveBeenCalledWith("Waking up workers...");
|
|
136
|
-
expect(workerProvider
|
|
152
|
+
expect(workerProvider.workersRunning).toBe(2);
|
|
137
153
|
|
|
138
154
|
await app.stop();
|
|
139
155
|
});
|
|
@@ -150,16 +166,16 @@ describe("WorkerProvider", () => {
|
|
|
150
166
|
const app = await createTestApp();
|
|
151
167
|
app.with(TestService);
|
|
152
168
|
|
|
153
|
-
const workerProvider = app.inject(
|
|
169
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
154
170
|
|
|
155
171
|
await app.start();
|
|
156
172
|
|
|
157
|
-
const oldController = workerProvider
|
|
173
|
+
const oldController = workerProvider.abortController;
|
|
158
174
|
expect(oldController.signal.aborted).toBe(false);
|
|
159
175
|
|
|
160
176
|
workerProvider.wakeUp();
|
|
161
177
|
|
|
162
|
-
const newController = workerProvider
|
|
178
|
+
const newController = workerProvider.abortController;
|
|
163
179
|
expect(oldController.signal.aborted).toBe(true);
|
|
164
180
|
expect(newController.signal.aborted).toBe(false);
|
|
165
181
|
expect(newController).not.toBe(oldController);
|
|
@@ -217,8 +233,8 @@ describe("WorkerProvider", () => {
|
|
|
217
233
|
const app = await createTestApp();
|
|
218
234
|
app.with(TestService);
|
|
219
235
|
|
|
220
|
-
const workerProvider = app.inject(
|
|
221
|
-
const errorSpy = vi.spyOn(workerProvider
|
|
236
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
237
|
+
const errorSpy = vi.spyOn(workerProvider.log, "error");
|
|
222
238
|
|
|
223
239
|
await app.start();
|
|
224
240
|
|
|
@@ -230,7 +246,7 @@ describe("WorkerProvider", () => {
|
|
|
230
246
|
.toBeTruthy();
|
|
231
247
|
|
|
232
248
|
// Worker should still be running after processing error
|
|
233
|
-
expect(workerProvider
|
|
249
|
+
expect(workerProvider.workersRunning).toBe(1);
|
|
234
250
|
|
|
235
251
|
await app.stop();
|
|
236
252
|
});
|
|
@@ -282,9 +298,9 @@ describe("WorkerProvider", () => {
|
|
|
282
298
|
const app = await createTestApp();
|
|
283
299
|
app.with(TestService);
|
|
284
300
|
|
|
285
|
-
const workerProvider = app.inject(
|
|
301
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
286
302
|
const queueProvider = app.inject(QueueProvider);
|
|
287
|
-
const errorSpy = vi.spyOn(workerProvider
|
|
303
|
+
const errorSpy = vi.spyOn(workerProvider.log, "error");
|
|
288
304
|
|
|
289
305
|
await app.start();
|
|
290
306
|
|
|
@@ -301,7 +317,7 @@ describe("WorkerProvider", () => {
|
|
|
301
317
|
);
|
|
302
318
|
|
|
303
319
|
// Worker should still be running
|
|
304
|
-
expect(workerProvider
|
|
320
|
+
expect(workerProvider.workersRunning).toBe(1);
|
|
305
321
|
|
|
306
322
|
await app.stop();
|
|
307
323
|
});
|
|
@@ -318,9 +334,9 @@ describe("WorkerProvider", () => {
|
|
|
318
334
|
const app = await createTestApp();
|
|
319
335
|
app.with(TestService);
|
|
320
336
|
|
|
321
|
-
const workerProvider = app.inject(
|
|
337
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
322
338
|
const queueProvider = app.inject(QueueProvider);
|
|
323
|
-
const errorSpy = vi.spyOn(workerProvider
|
|
339
|
+
const errorSpy = vi.spyOn(workerProvider.log, "error");
|
|
324
340
|
|
|
325
341
|
await app.start();
|
|
326
342
|
|
|
@@ -342,7 +358,7 @@ describe("WorkerProvider", () => {
|
|
|
342
358
|
);
|
|
343
359
|
|
|
344
360
|
// Worker should still be running
|
|
345
|
-
expect(workerProvider
|
|
361
|
+
expect(workerProvider.workersRunning).toBe(1);
|
|
346
362
|
|
|
347
363
|
await app.stop();
|
|
348
364
|
});
|
|
@@ -359,16 +375,16 @@ describe("WorkerProvider", () => {
|
|
|
359
375
|
const app = await createTestApp({ workerInterval: 5000 });
|
|
360
376
|
app.with(TestService);
|
|
361
377
|
|
|
362
|
-
const workerProvider = app.inject(
|
|
363
|
-
const warnSpy = vi.spyOn(workerProvider
|
|
378
|
+
const workerProvider = app.inject(TestWorkerProvider);
|
|
379
|
+
const warnSpy = vi.spyOn(workerProvider.log, "warn");
|
|
364
380
|
|
|
365
381
|
await app.start();
|
|
366
382
|
|
|
367
383
|
// Abort the controller to simulate abort during wait
|
|
368
|
-
workerProvider
|
|
384
|
+
workerProvider.abortController.abort();
|
|
369
385
|
|
|
370
386
|
// This should detect the abort and return early
|
|
371
|
-
await workerProvider
|
|
387
|
+
await workerProvider.waitForNextMessage(0);
|
|
372
388
|
|
|
373
389
|
expect(warnSpy).toHaveBeenCalledWith("Worker n-0 aborted.");
|
|
374
390
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { $module, type Alepha } from "alepha";
|
|
2
|
+
import { BunRedisProvider } from "./providers/BunRedisProvider.ts";
|
|
3
|
+
import { BunRedisSubscriberProvider } from "./providers/BunRedisSubscriberProvider.ts";
|
|
4
|
+
import { RedisProvider } from "./providers/RedisProvider.ts";
|
|
5
|
+
import { RedisSubscriberProvider } from "./providers/RedisSubscriberProvider.ts";
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
export * from "./providers/BunRedisProvider.ts";
|
|
10
|
+
export * from "./providers/BunRedisSubscriberProvider.ts";
|
|
11
|
+
export * from "./providers/RedisProvider.ts";
|
|
12
|
+
export * from "./providers/RedisSubscriberProvider.ts";
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
export const AlephaRedis = $module({
|
|
17
|
+
name: "alepha.redis",
|
|
18
|
+
services: [
|
|
19
|
+
BunRedisProvider,
|
|
20
|
+
BunRedisSubscriberProvider,
|
|
21
|
+
RedisProvider,
|
|
22
|
+
RedisSubscriberProvider,
|
|
23
|
+
],
|
|
24
|
+
register: (alepha: Alepha) => {
|
|
25
|
+
alepha
|
|
26
|
+
.with({
|
|
27
|
+
provide: RedisProvider,
|
|
28
|
+
use: BunRedisProvider,
|
|
29
|
+
})
|
|
30
|
+
.with({
|
|
31
|
+
provide: RedisSubscriberProvider,
|
|
32
|
+
use: BunRedisSubscriberProvider,
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
});
|
|
@@ -8,18 +8,13 @@ import {
|
|
|
8
8
|
t,
|
|
9
9
|
} from "alepha";
|
|
10
10
|
import { $logger } from "alepha/logger";
|
|
11
|
-
import type { RedisClient as BunRedisClient } from "bun";
|
|
12
11
|
import { RedisProvider, type RedisSetOptions } from "./RedisProvider.ts";
|
|
13
12
|
|
|
14
13
|
const envSchema = t.object({
|
|
15
|
-
REDIS_URL: t.
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
REDIS_URL: t.text({
|
|
15
|
+
default: "redis://localhost:6379",
|
|
16
|
+
description: "Redis connection URL",
|
|
18
17
|
}),
|
|
19
|
-
REDIS_HOST: t.text({
|
|
20
|
-
default: "localhost",
|
|
21
|
-
}),
|
|
22
|
-
REDIS_PASSWORD: t.optional(t.text()),
|
|
23
18
|
});
|
|
24
19
|
|
|
25
20
|
declare module "alepha" {
|
|
@@ -34,10 +29,8 @@ declare module "alepha" {
|
|
|
34
29
|
*
|
|
35
30
|
* @example
|
|
36
31
|
* ```ts
|
|
37
|
-
* // Set REDIS_URL environment variable
|
|
38
|
-
* // REDIS_URL=redis
|
|
39
|
-
*
|
|
40
|
-
* // Or configure via REDIS_HOST, REDIS_PORT, REDIS_PASSWORD
|
|
32
|
+
* // Set REDIS_URL environment variable (default: redis://localhost:6379)
|
|
33
|
+
* // REDIS_URL=redis://:password@myredis.example.com:6379
|
|
41
34
|
*
|
|
42
35
|
* // Or configure programmatically
|
|
43
36
|
* alepha.with({
|
|
@@ -50,9 +43,9 @@ export class BunRedisProvider extends RedisProvider {
|
|
|
50
43
|
protected readonly log = $logger();
|
|
51
44
|
protected readonly alepha = $inject(Alepha);
|
|
52
45
|
protected readonly env = $env(envSchema);
|
|
53
|
-
protected client?:
|
|
46
|
+
protected client?: Bun.RedisClient;
|
|
54
47
|
|
|
55
|
-
public get publisher():
|
|
48
|
+
public get publisher(): Bun.RedisClient {
|
|
56
49
|
if (!this.client?.connected) {
|
|
57
50
|
throw new AlephaError("Redis client is not ready");
|
|
58
51
|
}
|
|
@@ -79,7 +72,7 @@ export class BunRedisProvider extends RedisProvider {
|
|
|
79
72
|
*/
|
|
80
73
|
public override async connect(): Promise<void> {
|
|
81
74
|
// Check if we're running in Bun
|
|
82
|
-
if (
|
|
75
|
+
if (!this.alepha.isBun()) {
|
|
83
76
|
throw new AlephaError(
|
|
84
77
|
"BunRedisProvider requires the Bun runtime. Use NodeRedisProvider for Node.js.",
|
|
85
78
|
);
|
|
@@ -87,9 +80,7 @@ export class BunRedisProvider extends RedisProvider {
|
|
|
87
80
|
|
|
88
81
|
this.log.debug("Connecting...");
|
|
89
82
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
this.client = new RedisClient(this.getUrl(), {
|
|
83
|
+
this.client = new Bun.RedisClient(this.getUrl(), {
|
|
93
84
|
autoReconnect: true,
|
|
94
85
|
enableAutoPipelining: true,
|
|
95
86
|
});
|
|
@@ -124,14 +115,12 @@ export class BunRedisProvider extends RedisProvider {
|
|
|
124
115
|
/**
|
|
125
116
|
* Create a duplicate connection for pub/sub or other isolated operations.
|
|
126
117
|
*/
|
|
127
|
-
public async duplicate(): Promise<
|
|
118
|
+
public async duplicate(): Promise<Bun.RedisClient> {
|
|
128
119
|
if (typeof Bun === "undefined") {
|
|
129
120
|
throw new AlephaError("BunRedisProvider requires the Bun runtime.");
|
|
130
121
|
}
|
|
131
122
|
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
const client = new RedisClient(this.getUrl(), {
|
|
123
|
+
const client = new Bun.RedisClient(this.getUrl(), {
|
|
135
124
|
autoReconnect: true,
|
|
136
125
|
enableAutoPipelining: true,
|
|
137
126
|
});
|
|
@@ -279,26 +268,6 @@ export class BunRedisProvider extends RedisProvider {
|
|
|
279
268
|
* Get the Redis connection URL.
|
|
280
269
|
*/
|
|
281
270
|
protected getUrl(): string {
|
|
282
|
-
|
|
283
|
-
if (this.env.REDIS_URL) {
|
|
284
|
-
return this.env.REDIS_URL;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Build URL from components
|
|
288
|
-
const url = new URL("redis://127.0.0.1:6379");
|
|
289
|
-
|
|
290
|
-
if (this.env.REDIS_PASSWORD) {
|
|
291
|
-
url.password = this.env.REDIS_PASSWORD;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
if (this.env.REDIS_HOST) {
|
|
295
|
-
url.hostname = this.env.REDIS_HOST;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
if (this.env.REDIS_PORT) {
|
|
299
|
-
url.port = String(this.env.REDIS_PORT);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return url.toString();
|
|
271
|
+
return this.env.REDIS_URL;
|
|
303
272
|
}
|
|
304
273
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { $hook, $inject, Alepha, AlephaError } from "alepha";
|
|
2
2
|
import { $logger } from "alepha/logger";
|
|
3
|
-
import type { RedisClient as BunRedisClient } from "bun";
|
|
4
3
|
import { BunRedisProvider } from "./BunRedisProvider.ts";
|
|
5
4
|
import {
|
|
6
5
|
RedisSubscriberProvider,
|
|
@@ -25,9 +24,9 @@ export class BunRedisSubscriberProvider extends RedisSubscriberProvider {
|
|
|
25
24
|
protected readonly log = $logger();
|
|
26
25
|
protected readonly alepha = $inject(Alepha);
|
|
27
26
|
protected readonly redisProvider = $inject(BunRedisProvider);
|
|
28
|
-
protected client?:
|
|
27
|
+
protected client?: Bun.RedisClient;
|
|
29
28
|
|
|
30
|
-
public get subscriber():
|
|
29
|
+
public get subscriber(): Bun.RedisClient {
|
|
31
30
|
if (!this.client?.connected) {
|
|
32
31
|
throw new AlephaError("Redis subscriber client is not ready");
|
|
33
32
|
}
|