@dangao/bun-server 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/package.json +4 -2
  2. package/readme.md +163 -2
  3. package/src/auth/controller.ts +148 -0
  4. package/src/auth/decorators.ts +81 -0
  5. package/src/auth/index.ts +12 -0
  6. package/src/auth/jwt.ts +169 -0
  7. package/src/auth/oauth2.ts +244 -0
  8. package/src/auth/types.ts +248 -0
  9. package/src/cache/cache-module.ts +67 -0
  10. package/src/cache/decorators.ts +202 -0
  11. package/src/cache/index.ts +27 -0
  12. package/src/cache/service.ts +151 -0
  13. package/src/cache/types.ts +420 -0
  14. package/src/config/config-module.ts +76 -0
  15. package/src/config/index.ts +8 -0
  16. package/src/config/service.ts +93 -0
  17. package/src/config/types.ts +27 -0
  18. package/src/controller/controller.ts +251 -0
  19. package/src/controller/decorators.ts +84 -0
  20. package/src/controller/index.ts +7 -0
  21. package/src/controller/metadata.ts +27 -0
  22. package/src/controller/param-binder.ts +157 -0
  23. package/src/core/application.ts +233 -0
  24. package/src/core/context.ts +228 -0
  25. package/src/core/index.ts +4 -0
  26. package/src/core/server.ts +128 -0
  27. package/src/core/types.ts +2 -0
  28. package/src/database/connection-manager.ts +239 -0
  29. package/src/database/connection-pool.ts +322 -0
  30. package/src/database/database-extension.ts +62 -0
  31. package/src/database/database-module.ts +115 -0
  32. package/src/database/health-indicator.ts +51 -0
  33. package/src/database/index.ts +47 -0
  34. package/src/database/orm/decorators.ts +155 -0
  35. package/src/database/orm/drizzle-repository.ts +39 -0
  36. package/src/database/orm/index.ts +23 -0
  37. package/src/database/orm/repository-decorator.ts +39 -0
  38. package/src/database/orm/repository.ts +103 -0
  39. package/src/database/orm/service.ts +49 -0
  40. package/src/database/orm/transaction-decorator.ts +45 -0
  41. package/src/database/orm/transaction-interceptor.ts +243 -0
  42. package/src/database/orm/transaction-manager.ts +276 -0
  43. package/src/database/orm/transaction-types.ts +140 -0
  44. package/src/database/orm/types.ts +99 -0
  45. package/src/database/service.ts +221 -0
  46. package/src/database/types.ts +171 -0
  47. package/src/di/container.ts +398 -0
  48. package/src/di/decorators.ts +228 -0
  49. package/src/di/index.ts +4 -0
  50. package/src/di/module-registry.ts +188 -0
  51. package/src/di/module.ts +65 -0
  52. package/src/di/types.ts +67 -0
  53. package/src/error/error-codes.ts +222 -0
  54. package/src/error/filter.ts +43 -0
  55. package/src/error/handler.ts +66 -0
  56. package/src/error/http-exception.ts +115 -0
  57. package/src/error/i18n.ts +217 -0
  58. package/src/error/index.ts +16 -0
  59. package/src/extensions/index.ts +5 -0
  60. package/src/extensions/logger-extension.ts +31 -0
  61. package/src/extensions/logger-module.ts +69 -0
  62. package/src/extensions/types.ts +14 -0
  63. package/src/files/index.ts +5 -0
  64. package/src/files/static-middleware.ts +53 -0
  65. package/src/files/storage.ts +67 -0
  66. package/src/files/types.ts +33 -0
  67. package/src/files/upload-middleware.ts +45 -0
  68. package/src/health/controller.ts +76 -0
  69. package/src/health/health-module.ts +51 -0
  70. package/src/health/index.ts +12 -0
  71. package/src/health/types.ts +28 -0
  72. package/src/index.ts +270 -0
  73. package/src/metrics/collector.ts +209 -0
  74. package/src/metrics/controller.ts +40 -0
  75. package/src/metrics/index.ts +15 -0
  76. package/src/metrics/metrics-module.ts +58 -0
  77. package/src/metrics/middleware.ts +46 -0
  78. package/src/metrics/prometheus.ts +79 -0
  79. package/src/metrics/types.ts +103 -0
  80. package/src/middleware/builtin/cors.ts +60 -0
  81. package/src/middleware/builtin/error-handler.ts +90 -0
  82. package/src/middleware/builtin/file-upload.ts +42 -0
  83. package/src/middleware/builtin/index.ts +14 -0
  84. package/src/middleware/builtin/logger.ts +91 -0
  85. package/src/middleware/builtin/rate-limit.ts +252 -0
  86. package/src/middleware/builtin/static-file.ts +88 -0
  87. package/src/middleware/decorators.ts +91 -0
  88. package/src/middleware/index.ts +11 -0
  89. package/src/middleware/middleware.ts +13 -0
  90. package/src/middleware/pipeline.ts +93 -0
  91. package/src/queue/decorators.ts +110 -0
  92. package/src/queue/index.ts +26 -0
  93. package/src/queue/queue-module.ts +64 -0
  94. package/src/queue/service.ts +302 -0
  95. package/src/queue/types.ts +341 -0
  96. package/src/request/body-parser.ts +133 -0
  97. package/src/request/file-handler.ts +46 -0
  98. package/src/request/index.ts +5 -0
  99. package/src/request/request.ts +107 -0
  100. package/src/request/response.ts +150 -0
  101. package/src/router/decorators.ts +122 -0
  102. package/src/router/index.ts +6 -0
  103. package/src/router/registry.ts +98 -0
  104. package/src/router/route.ts +140 -0
  105. package/src/router/router.ts +241 -0
  106. package/src/router/types.ts +27 -0
  107. package/src/security/access-decision-manager.ts +34 -0
  108. package/src/security/authentication-manager.ts +47 -0
  109. package/src/security/context.ts +92 -0
  110. package/src/security/filter.ts +162 -0
  111. package/src/security/index.ts +8 -0
  112. package/src/security/providers/index.ts +3 -0
  113. package/src/security/providers/jwt-provider.ts +60 -0
  114. package/src/security/providers/oauth2-provider.ts +70 -0
  115. package/src/security/security-module.ts +145 -0
  116. package/src/security/types.ts +165 -0
  117. package/src/session/decorators.ts +45 -0
  118. package/src/session/index.ts +19 -0
  119. package/src/session/middleware.ts +143 -0
  120. package/src/session/service.ts +218 -0
  121. package/src/session/session-module.ts +69 -0
  122. package/src/session/types.ts +373 -0
  123. package/src/swagger/decorators.ts +133 -0
  124. package/src/swagger/generator.ts +234 -0
  125. package/src/swagger/index.ts +7 -0
  126. package/src/swagger/swagger-extension.ts +41 -0
  127. package/src/swagger/swagger-module.ts +83 -0
  128. package/src/swagger/types.ts +188 -0
  129. package/src/swagger/ui.ts +98 -0
  130. package/src/testing/harness.ts +96 -0
  131. package/src/validation/decorators.ts +95 -0
  132. package/src/validation/errors.ts +28 -0
  133. package/src/validation/index.ts +14 -0
  134. package/src/validation/types.ts +35 -0
  135. package/src/validation/validator.ts +63 -0
  136. package/src/websocket/decorators.ts +51 -0
  137. package/src/websocket/index.ts +12 -0
  138. package/src/websocket/registry.ts +133 -0
  139. package/tests/cache/cache-module.test.ts +212 -0
  140. package/tests/config/config-module.test.ts +151 -0
  141. package/tests/controller/controller.test.ts +189 -0
  142. package/tests/core/application.test.ts +57 -0
  143. package/tests/core/context-body.test.ts +44 -0
  144. package/tests/core/context.test.ts +86 -0
  145. package/tests/core/edge-cases.test.ts +432 -0
  146. package/tests/database/database-module.test.ts +385 -0
  147. package/tests/database/orm.test.ts +164 -0
  148. package/tests/database/postgres-mysql-integration.test.ts +395 -0
  149. package/tests/database/transaction.test.ts +238 -0
  150. package/tests/di/container.test.ts +264 -0
  151. package/tests/di/module.test.ts +128 -0
  152. package/tests/error/error-codes.test.ts +121 -0
  153. package/tests/error/error-handler.test.ts +68 -0
  154. package/tests/error/error-handling.test.ts +254 -0
  155. package/tests/error/http-exception.test.ts +37 -0
  156. package/tests/error/i18n-integration.test.ts +175 -0
  157. package/tests/extensions/logger-extension.test.ts +40 -0
  158. package/tests/files/static-middleware.test.ts +67 -0
  159. package/tests/files/upload-middleware.test.ts +43 -0
  160. package/tests/health/health-module.test.ts +116 -0
  161. package/tests/integration/application-router.test.ts +85 -0
  162. package/tests/integration/body-parsing.test.ts +88 -0
  163. package/tests/integration/cache-e2e.test.ts +114 -0
  164. package/tests/integration/oauth2-e2e.test.ts +615 -0
  165. package/tests/integration/session-e2e.test.ts +207 -0
  166. package/tests/metrics/metrics-module.test.ts +178 -0
  167. package/tests/middleware/builtin.test.ts +206 -0
  168. package/tests/middleware/file-upload.test.ts +41 -0
  169. package/tests/middleware/middleware.test.ts +120 -0
  170. package/tests/middleware/pipeline.test.ts +72 -0
  171. package/tests/middleware/rate-limit.test.ts +314 -0
  172. package/tests/middleware/static-file.test.ts +62 -0
  173. package/tests/perf/harness.test.ts +48 -0
  174. package/tests/perf/optimization.test.ts +183 -0
  175. package/tests/perf/regression.test.ts +120 -0
  176. package/tests/queue/queue-module.test.ts +217 -0
  177. package/tests/request/body-parser.test.ts +96 -0
  178. package/tests/request/response.test.ts +99 -0
  179. package/tests/router/decorators.test.ts +48 -0
  180. package/tests/router/registry.test.ts +51 -0
  181. package/tests/router/route.test.ts +71 -0
  182. package/tests/router/router-normalization.test.ts +106 -0
  183. package/tests/router/router.test.ts +133 -0
  184. package/tests/security/access-decision-manager.test.ts +84 -0
  185. package/tests/security/authentication-manager.test.ts +81 -0
  186. package/tests/security/context.test.ts +302 -0
  187. package/tests/security/filter.test.ts +225 -0
  188. package/tests/security/jwt-provider.test.ts +106 -0
  189. package/tests/security/oauth2-provider.test.ts +269 -0
  190. package/tests/security/security-module.test.ts +143 -0
  191. package/tests/session/session-module.test.ts +307 -0
  192. package/tests/stress/di-stress.test.ts +30 -0
  193. package/tests/swagger/decorators.test.ts +153 -0
  194. package/tests/swagger/generator.test.ts +202 -0
  195. package/tests/swagger/swagger-extension.test.ts +72 -0
  196. package/tests/swagger/swagger-module.test.ts +79 -0
  197. package/tests/utils/test-port.ts +10 -0
  198. package/tests/validation/controller-validation.test.ts +64 -0
  199. package/tests/validation/validation.test.ts +42 -0
  200. package/tests/websocket/gateway.test.ts +68 -0
@@ -0,0 +1,99 @@
1
+ import type { DatabaseService } from '../service';
2
+
3
+ /**
4
+ * ORM 配置选项
5
+ */
6
+ export interface OrmModuleOptions {
7
+ /**
8
+ * 是否启用 ORM
9
+ * @default true
10
+ */
11
+ enabled?: boolean;
12
+ /**
13
+ * Drizzle 数据库实例(如果使用 Drizzle ORM)
14
+ */
15
+ drizzle?: unknown;
16
+ /**
17
+ * 数据库服务(用于创建 Drizzle 实例)
18
+ */
19
+ databaseService?: DatabaseService;
20
+ }
21
+
22
+ /**
23
+ * Repository 基类接口
24
+ */
25
+ export interface BaseRepository<T = unknown> {
26
+ /**
27
+ * 查找所有记录
28
+ */
29
+ findAll(): Promise<T[]>;
30
+ /**
31
+ * 根据 ID 查找记录
32
+ */
33
+ findById(id: string | number): Promise<T | null>;
34
+ /**
35
+ * 创建记录
36
+ */
37
+ create(data: Partial<T>): Promise<T>;
38
+ /**
39
+ * 更新记录
40
+ */
41
+ update(id: string | number, data: Partial<T>): Promise<T>;
42
+ /**
43
+ * 删除记录
44
+ */
45
+ delete(id: string | number): Promise<boolean>;
46
+ }
47
+
48
+ /**
49
+ * Entity 元数据
50
+ */
51
+ export interface EntityMetadata {
52
+ /**
53
+ * 表名
54
+ */
55
+ tableName: string;
56
+ /**
57
+ * 主键字段名
58
+ */
59
+ primaryKey?: string;
60
+ /**
61
+ * 字段元数据
62
+ */
63
+ columns: ColumnMetadata[];
64
+ }
65
+
66
+ /**
67
+ * 列元数据
68
+ */
69
+ export interface ColumnMetadata {
70
+ /**
71
+ * 字段名
72
+ */
73
+ name: string;
74
+ /**
75
+ * 字段类型
76
+ */
77
+ type: string;
78
+ /**
79
+ * 是否为主键
80
+ */
81
+ primaryKey?: boolean;
82
+ /**
83
+ * 是否自动递增
84
+ */
85
+ autoIncrement?: boolean;
86
+ /**
87
+ * 是否可为空
88
+ */
89
+ nullable?: boolean;
90
+ /**
91
+ * 默认值
92
+ */
93
+ defaultValue?: unknown;
94
+ }
95
+
96
+ /**
97
+ * ORM Service Token
98
+ */
99
+ export const ORM_SERVICE_TOKEN = Symbol('@dangao/bun-server:orm:service');
@@ -0,0 +1,221 @@
1
+ import { Injectable } from '../di/decorators';
2
+
3
+ import { DatabaseConnectionManager } from './connection-manager';
4
+ import type {
5
+ ConnectionInfo,
6
+ DatabaseConfig,
7
+ DatabaseModuleOptions,
8
+ } from './types';
9
+
10
+ /**
11
+ * 数据库服务
12
+ * 提供数据库连接管理和查询接口
13
+ */
14
+ @Injectable()
15
+ export class DatabaseService {
16
+ private connectionManager: DatabaseConnectionManager;
17
+ private options: DatabaseModuleOptions;
18
+
19
+ public constructor(options: DatabaseModuleOptions) {
20
+ this.options = options;
21
+ this.connectionManager = new DatabaseConnectionManager(
22
+ options.database,
23
+ options.pool,
24
+ );
25
+ }
26
+
27
+ /**
28
+ * 初始化数据库连接
29
+ */
30
+ public async initialize(): Promise<void> {
31
+ await this.connectionManager.connect();
32
+ }
33
+
34
+ /**
35
+ * 关闭数据库连接(释放回池中)
36
+ */
37
+ public async close(): Promise<void> {
38
+ await this.connectionManager.disconnect();
39
+ }
40
+
41
+ /**
42
+ * 关闭连接池(关闭所有连接)
43
+ */
44
+ public async closePool(): Promise<void> {
45
+ await this.connectionManager.closePool();
46
+ }
47
+
48
+ /**
49
+ * 获取连接池统计信息
50
+ */
51
+ public getPoolStats() {
52
+ return this.connectionManager.getPoolStats();
53
+ }
54
+
55
+ /**
56
+ * 获取数据库连接
57
+ */
58
+ public getConnection(): unknown {
59
+ return this.connectionManager.getConnection();
60
+ }
61
+
62
+ /**
63
+ * 获取配置(供 TransactionManager 使用)
64
+ */
65
+ public get config(): DatabaseModuleOptions {
66
+ return this.options;
67
+ }
68
+
69
+ /**
70
+ * 获取数据库类型
71
+ */
72
+ public getDatabaseType(): DatabaseConfig['type'] {
73
+ return this.connectionManager.getDatabaseType();
74
+ }
75
+
76
+ /**
77
+ * 检查数据库连接健康状态
78
+ */
79
+ public async healthCheck(): Promise<boolean> {
80
+ if (!this.options.enableHealthCheck) {
81
+ return true;
82
+ }
83
+
84
+ return await this.connectionManager.healthCheck();
85
+ }
86
+
87
+ /**
88
+ * 获取连接信息
89
+ */
90
+ public getConnectionInfo(): ConnectionInfo {
91
+ return this.connectionManager.getConnectionInfo();
92
+ }
93
+
94
+ /**
95
+ * 执行 SQL 查询
96
+ * SQLite 返回同步结果,PostgreSQL/MySQL 返回异步结果
97
+ */
98
+ public query<T = unknown>(sql: string, params?: unknown[]): T[] | Promise<T[]> {
99
+ const connection = this.getConnection();
100
+ if (!connection) {
101
+ throw new Error('Database connection is not established');
102
+ }
103
+
104
+ const dbType = this.getDatabaseType();
105
+ if (dbType === 'sqlite') {
106
+ return this.querySqlite(connection, sql, params);
107
+ } else if (dbType === 'postgres' || dbType === 'mysql') {
108
+ return this.queryBunSQL(connection, sql, params);
109
+ }
110
+
111
+ throw new Error(`Query not supported for database type: ${dbType}`);
112
+ }
113
+
114
+ /**
115
+ * SQLite 查询实现
116
+ */
117
+ private querySqlite<T = unknown>(
118
+ connection: unknown,
119
+ sql: string,
120
+ params?: unknown[],
121
+ ): T[] {
122
+ // Bun SQLite Database 对象
123
+ if (
124
+ connection &&
125
+ typeof connection === 'object' &&
126
+ 'query' in connection &&
127
+ typeof connection.query === 'function'
128
+ ) {
129
+ const db = connection as {
130
+ query: (sql: string) => {
131
+ all: (...params: unknown[]) => T[];
132
+ get: (...params: unknown[]) => T | undefined;
133
+ };
134
+ };
135
+
136
+ const statement = db.query(sql);
137
+ // Bun SQLite 的 all() 方法接受参数
138
+ const result =
139
+ params && params.length > 0 ? statement.all(...params) : statement.all();
140
+ return result;
141
+ }
142
+
143
+ throw new Error('Invalid SQLite connection');
144
+ }
145
+
146
+ /**
147
+ * Bun.SQL 查询实现(PostgreSQL/MySQL)
148
+ * 注意:Bun.SQL 主要使用模板字符串,但为了兼容性,我们尝试支持参数化查询
149
+ */
150
+ private async queryBunSQL<T = unknown>(
151
+ connection: unknown,
152
+ sql: string,
153
+ params?: unknown[],
154
+ ): Promise<T[]> {
155
+ // Bun.SQL 对象可以作为函数调用(模板字符串)
156
+ // 但我们需要支持参数化查询
157
+ if (connection && typeof connection === 'function') {
158
+ // Bun.SQL 模板字符串查询
159
+ // 注意:Bun.SQL 使用模板字符串,参数会自动转义
160
+ // 这里我们需要将 SQL 和参数组合成模板字符串调用
161
+ // 但由于 TypeScript 限制,我们使用动态调用
162
+ try {
163
+ // 尝试使用模板字符串方式
164
+ // 注意:这需要将参数插入到 SQL 中,但 Bun.SQL 会自动处理 SQL 注入防护
165
+ const sqlWithParams = this.interpolateParams(sql, params);
166
+ const result = await (connection as (
167
+ template: TemplateStringsArray,
168
+ ...values: unknown[]
169
+ ) => Promise<Array<Record<string, unknown>>>)`${sqlWithParams}`;
170
+ return result as T[];
171
+ } catch {
172
+ // 如果模板字符串方式失败,尝试其他方式
173
+ throw new Error(
174
+ 'Bun.SQL parameterized queries are not fully supported. Consider using template string queries.',
175
+ );
176
+ }
177
+ }
178
+
179
+ // 尝试使用 query 方法(如果存在)
180
+ if (
181
+ connection &&
182
+ typeof connection === 'object' &&
183
+ 'query' in connection &&
184
+ typeof connection.query === 'function'
185
+ ) {
186
+ const db = connection as {
187
+ query: (
188
+ sql: string,
189
+ ...params: unknown[]
190
+ ) => Promise<Array<Record<string, unknown>>>;
191
+ };
192
+ const result = await db.query(sql, ...(params ?? []));
193
+ return result as T[];
194
+ }
195
+
196
+ throw new Error('Invalid Bun.SQL connection');
197
+ }
198
+
199
+ /**
200
+ * 将参数插入到 SQL 中(用于 Bun.SQL 模板字符串)
201
+ * 注意:这只是临时方案,Bun.SQL 的模板字符串会自动处理 SQL 注入防护
202
+ */
203
+ private interpolateParams(sql: string, params?: unknown[]): string {
204
+ if (!params || params.length === 0) {
205
+ return sql;
206
+ }
207
+
208
+ // 简单的参数替换(实际应该使用 Bun.SQL 的模板字符串)
209
+ // 这里只是占位实现,实际使用时应该使用模板字符串
210
+ let result = sql;
211
+ for (let i = 0; i < params.length; i++) {
212
+ const param = params[i];
213
+ const value =
214
+ typeof param === 'string'
215
+ ? `'${param.replace(/'/g, "''")}'`
216
+ : String(param);
217
+ result = result.replace('?', value);
218
+ }
219
+ return result;
220
+ }
221
+ }
@@ -0,0 +1,171 @@
1
+ /**
2
+ * 数据库类型
3
+ */
4
+ export type DatabaseType = 'sqlite' | 'postgres' | 'mysql';
5
+
6
+ /**
7
+ * SQLite 配置
8
+ */
9
+ export interface SqliteConfig {
10
+ /**
11
+ * 数据库文件路径(相对或绝对路径)
12
+ * 例如:':memory:' 表示内存数据库,'./data.db' 表示文件数据库
13
+ */
14
+ path: string;
15
+ }
16
+
17
+ /**
18
+ * PostgreSQL 配置
19
+ */
20
+ export interface PostgresConfig {
21
+ /**
22
+ * 数据库主机
23
+ */
24
+ host: string;
25
+ /**
26
+ * 数据库端口
27
+ */
28
+ port: number;
29
+ /**
30
+ * 数据库名称
31
+ */
32
+ database: string;
33
+ /**
34
+ * 用户名
35
+ */
36
+ user: string;
37
+ /**
38
+ * 密码
39
+ */
40
+ password: string;
41
+ /**
42
+ * SSL 配置(可选)
43
+ */
44
+ ssl?: boolean;
45
+ }
46
+
47
+ /**
48
+ * MySQL 配置
49
+ */
50
+ export interface MysqlConfig {
51
+ /**
52
+ * 数据库主机
53
+ */
54
+ host: string;
55
+ /**
56
+ * 数据库端口
57
+ */
58
+ port: number;
59
+ /**
60
+ * 数据库名称
61
+ */
62
+ database: string;
63
+ /**
64
+ * 用户名
65
+ */
66
+ user: string;
67
+ /**
68
+ * 密码
69
+ */
70
+ password: string;
71
+ }
72
+
73
+ /**
74
+ * 数据库配置(联合类型)
75
+ */
76
+ export type DatabaseConfig =
77
+ | { type: 'sqlite'; config: SqliteConfig }
78
+ | { type: 'postgres'; config: PostgresConfig }
79
+ | { type: 'mysql'; config: MysqlConfig };
80
+
81
+ /**
82
+ * 连接池配置
83
+ */
84
+ export interface ConnectionPoolOptions {
85
+ /**
86
+ * 最大连接数
87
+ * @default 10
88
+ */
89
+ maxConnections?: number;
90
+ /**
91
+ * 连接超时时间(毫秒)
92
+ * @default 30000
93
+ */
94
+ connectionTimeout?: number;
95
+ /**
96
+ * 连接重试次数
97
+ * @default 3
98
+ */
99
+ retryCount?: number;
100
+ /**
101
+ * 重试延迟(毫秒)
102
+ * @default 1000
103
+ */
104
+ retryDelay?: number;
105
+ }
106
+
107
+ /**
108
+ * DatabaseModule 配置选项
109
+ */
110
+ export interface DatabaseModuleOptions {
111
+ /**
112
+ * 数据库配置
113
+ */
114
+ database: DatabaseConfig;
115
+ /**
116
+ * 连接池配置
117
+ */
118
+ pool?: ConnectionPoolOptions;
119
+ /**
120
+ * 是否启用连接健康检查
121
+ * @default true
122
+ */
123
+ enableHealthCheck?: boolean;
124
+ /**
125
+ * ORM 配置(可选)
126
+ */
127
+ orm?: {
128
+ /**
129
+ * 是否启用 ORM
130
+ * @default false
131
+ */
132
+ enabled?: boolean;
133
+ /**
134
+ * Drizzle 数据库实例(如果使用 Drizzle ORM)
135
+ */
136
+ drizzle?: unknown;
137
+ };
138
+ }
139
+
140
+ /**
141
+ * 数据库连接状态
142
+ */
143
+ export type ConnectionStatus = 'connected' | 'disconnected' | 'connecting' | 'error';
144
+
145
+ /**
146
+ * 数据库连接信息
147
+ */
148
+ export interface ConnectionInfo {
149
+ /**
150
+ * 连接状态
151
+ */
152
+ status: ConnectionStatus;
153
+ /**
154
+ * 数据库类型
155
+ */
156
+ type: DatabaseType;
157
+ /**
158
+ * 连接错误信息(如果有)
159
+ */
160
+ error?: string;
161
+ }
162
+
163
+ /**
164
+ * DatabaseService Token
165
+ */
166
+ export const DATABASE_SERVICE_TOKEN = Symbol('@dangao/bun-server:database:service');
167
+
168
+ /**
169
+ * DatabaseModule Options Token
170
+ */
171
+ export const DATABASE_OPTIONS_TOKEN = Symbol('@dangao/bun-server:database:options');