@dangao/bun-server 0.4.0 → 1.0.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.
Files changed (44) hide show
  1. package/dist/cache/cache-module.d.ts +9 -0
  2. package/dist/cache/cache-module.d.ts.map +1 -0
  3. package/dist/cache/decorators.d.ts +110 -0
  4. package/dist/cache/decorators.d.ts.map +1 -0
  5. package/dist/cache/index.d.ts +6 -0
  6. package/dist/cache/index.d.ts.map +1 -0
  7. package/dist/cache/service.d.ts +76 -0
  8. package/dist/cache/service.d.ts.map +1 -0
  9. package/dist/cache/types.d.ts +160 -0
  10. package/dist/cache/types.d.ts.map +1 -0
  11. package/dist/controller/decorators.d.ts +9 -1
  12. package/dist/controller/decorators.d.ts.map +1 -1
  13. package/dist/controller/param-binder.d.ts +4 -1
  14. package/dist/controller/param-binder.d.ts.map +1 -1
  15. package/dist/index.d.ts +6 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1123 -25
  18. package/dist/middleware/pipeline.d.ts.map +1 -1
  19. package/dist/queue/decorators.d.ts +63 -0
  20. package/dist/queue/decorators.d.ts.map +1 -0
  21. package/dist/queue/index.d.ts +6 -0
  22. package/dist/queue/index.d.ts.map +1 -0
  23. package/dist/queue/queue-module.d.ts +9 -0
  24. package/dist/queue/queue-module.d.ts.map +1 -0
  25. package/dist/queue/service.d.ts +93 -0
  26. package/dist/queue/service.d.ts.map +1 -0
  27. package/dist/queue/types.d.ts +204 -0
  28. package/dist/queue/types.d.ts.map +1 -0
  29. package/dist/router/router.d.ts +16 -1
  30. package/dist/router/router.d.ts.map +1 -1
  31. package/dist/session/decorators.d.ts +16 -0
  32. package/dist/session/decorators.d.ts.map +1 -0
  33. package/dist/session/index.d.ts +8 -0
  34. package/dist/session/index.d.ts.map +1 -0
  35. package/dist/session/middleware.d.ts +8 -0
  36. package/dist/session/middleware.d.ts.map +1 -0
  37. package/dist/session/service.d.ts +86 -0
  38. package/dist/session/service.d.ts.map +1 -0
  39. package/dist/session/session-module.d.ts +9 -0
  40. package/dist/session/session-module.d.ts.map +1 -0
  41. package/dist/session/types.d.ts +193 -0
  42. package/dist/session/types.d.ts.map +1 -0
  43. package/package.json +1 -1
  44. package/readme.md +98 -117
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Session 数据
3
+ */
4
+ export interface SessionData {
5
+ [key: string]: unknown;
6
+ }
7
+ /**
8
+ * Session 信息
9
+ */
10
+ export interface Session {
11
+ /**
12
+ * Session ID
13
+ */
14
+ id: string;
15
+ /**
16
+ * Session 数据
17
+ */
18
+ data: SessionData;
19
+ /**
20
+ * 创建时间
21
+ */
22
+ createdAt: number;
23
+ /**
24
+ * 最后访问时间
25
+ */
26
+ lastAccessedAt: number;
27
+ /**
28
+ * 过期时间(毫秒时间戳)
29
+ */
30
+ expiresAt: number;
31
+ }
32
+ /**
33
+ * Session 存储接口
34
+ */
35
+ export interface SessionStore {
36
+ /**
37
+ * 获取 Session
38
+ * @param sessionId - Session ID
39
+ * @returns Session,如果不存在或已过期则返回 undefined
40
+ */
41
+ get(sessionId: string): Promise<Session | undefined>;
42
+ /**
43
+ * 设置 Session
44
+ * @param session - Session 信息
45
+ * @param maxAge - 最大存活时间(毫秒)
46
+ * @returns 是否设置成功
47
+ */
48
+ set(session: Session, maxAge: number): Promise<boolean>;
49
+ /**
50
+ * 删除 Session
51
+ * @param sessionId - Session ID
52
+ * @returns 是否删除成功
53
+ */
54
+ delete(sessionId: string): Promise<boolean>;
55
+ /**
56
+ * 检查 Session 是否存在
57
+ * @param sessionId - Session ID
58
+ * @returns 是否存在
59
+ */
60
+ has(sessionId: string): Promise<boolean>;
61
+ /**
62
+ * 更新 Session 的最后访问时间
63
+ * @param sessionId - Session ID
64
+ * @returns 是否更新成功
65
+ */
66
+ touch(sessionId: string): Promise<boolean>;
67
+ /**
68
+ * 清空所有 Session
69
+ * @returns 是否清空成功
70
+ */
71
+ clear(): Promise<boolean>;
72
+ }
73
+ /**
74
+ * 内存 Session 存储实现
75
+ */
76
+ export declare class MemorySessionStore implements SessionStore {
77
+ private store;
78
+ private cleanupInterval?;
79
+ constructor(options?: {
80
+ cleanupInterval?: number;
81
+ });
82
+ get(sessionId: string): Promise<Session | undefined>;
83
+ set(session: Session, maxAge: number): Promise<boolean>;
84
+ delete(sessionId: string): Promise<boolean>;
85
+ has(sessionId: string): Promise<boolean>;
86
+ touch(sessionId: string): Promise<boolean>;
87
+ clear(): Promise<boolean>;
88
+ /**
89
+ * 清理过期 Session
90
+ */
91
+ private cleanup;
92
+ /**
93
+ * 销毁存储,清理定时器
94
+ */
95
+ destroy(): void;
96
+ }
97
+ /**
98
+ * Redis Session 存储实现(需要 redis 包)
99
+ */
100
+ export interface RedisSessionStoreOptions {
101
+ /**
102
+ * Redis 客户端(需要用户提供)
103
+ */
104
+ client: {
105
+ get(key: string): Promise<string | null>;
106
+ set(key: string, value: string, options?: {
107
+ PX?: number;
108
+ }): Promise<void>;
109
+ del(key: string): Promise<void>;
110
+ exists(key: string): Promise<number>;
111
+ expire(key: string, seconds: number): Promise<void>;
112
+ };
113
+ /**
114
+ * 键前缀
115
+ * @default 'session:'
116
+ */
117
+ keyPrefix?: string;
118
+ }
119
+ export declare class RedisSessionStore implements SessionStore {
120
+ private client;
121
+ private keyPrefix;
122
+ constructor(options: RedisSessionStoreOptions);
123
+ private getKey;
124
+ get(sessionId: string): Promise<Session | undefined>;
125
+ set(session: Session, maxAge: number): Promise<boolean>;
126
+ delete(sessionId: string): Promise<boolean>;
127
+ has(sessionId: string): Promise<boolean>;
128
+ touch(sessionId: string): Promise<boolean>;
129
+ clear(): Promise<boolean>;
130
+ }
131
+ /**
132
+ * SessionModule 配置选项
133
+ */
134
+ export interface SessionModuleOptions {
135
+ /**
136
+ * Session 存储实现
137
+ * @default MemorySessionStore
138
+ */
139
+ store?: SessionStore;
140
+ /**
141
+ * Session 名称(Cookie 名称)
142
+ * @default 'sessionId'
143
+ */
144
+ name?: string;
145
+ /**
146
+ * Session 最大存活时间(毫秒)
147
+ * @default 86400000 (24 小时)
148
+ */
149
+ maxAge?: number;
150
+ /**
151
+ * 是否在每次访问时更新过期时间
152
+ * @default true
153
+ */
154
+ rolling?: boolean;
155
+ /**
156
+ * Cookie 选项
157
+ */
158
+ cookie?: {
159
+ /**
160
+ * 是否只在 HTTPS 下发送
161
+ * @default false
162
+ */
163
+ secure?: boolean;
164
+ /**
165
+ * 是否只能通过 HTTP 访问(不能通过 JavaScript)
166
+ * @default true
167
+ */
168
+ httpOnly?: boolean;
169
+ /**
170
+ * Cookie 路径
171
+ * @default '/'
172
+ */
173
+ path?: string;
174
+ /**
175
+ * Cookie 域名
176
+ */
177
+ domain?: string;
178
+ /**
179
+ * SameSite 属性
180
+ * @default 'lax'
181
+ */
182
+ sameSite?: 'strict' | 'lax' | 'none';
183
+ };
184
+ }
185
+ /**
186
+ * SessionService Token
187
+ */
188
+ export declare const SESSION_SERVICE_TOKEN: unique symbol;
189
+ /**
190
+ * SessionModule Options Token
191
+ */
192
+ export declare const SESSION_OPTIONS_TOKEN: unique symbol;
193
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/session/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dangao/bun-server",
3
- "version": "0.4.0",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/readme.md CHANGED
@@ -2,87 +2,72 @@
2
2
 
3
3
  [![bun](https://img.shields.io/badge/Bun-1.3%2B-000?logo=bun&logoColor=fff)](https://bun.sh/)
4
4
  [![typescript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=fff)](https://www.typescriptlang.org/)
5
- [![license](https://img.shields.io/badge/license-MIT-blue)](#许可证)
6
-
7
- > Bun Server 是一个运行在 Bun Runtime 上的高性能、装饰器驱动的 DI Web
8
- > 框架,目标是为企业级应用提供即开即用的现代体验。
9
-
10
- - [Bun Server](#@dangao/bun-server)
11
- - [为什么选择 Bun Server](#为什么选择-@dangao/bun-server)
12
- - [核心特性](#核心特性)
13
- - [架构总览](#架构总览)
14
- - [快速上手](#快速上手)
15
- - [示例与扩展](#示例与扩展)
16
- - [性能与 Benchmark](#性能与-benchmark)
17
- - [文档与多语言支持](#文档与多语言支持)
18
- - [路线图](#路线图)
19
- - [工程规范](#工程规范)
20
- - [贡献指南](#贡献指南)
21
- - [许可证](#许可证)
22
- - [其他语言](#其他语言)
23
-
24
- ## 为什么选择 Bun Server
25
-
26
- - **原生 Bun**:充分利用 Bun Runtime 的高性能 I/O、原生 TypeScript
27
- 与极速包管理器。
28
- - **现代 DX**:大量使用装饰器、元数据与
29
- DI,让控制器、服务、路由、验证与中间件的编写极其顺滑。
30
- - **轻量 +
31
- 可扩展**:松耦合的模块系统、扩展系统与日志框架,既可以快速起步,也能按需裁剪。
32
- - **Monorepo 友好**:原生支持 Bun workspaces,使用 `workspace:*`
33
- 协议管理内部依赖,配合 catalog 统一版本,完美适配多包协作场景。
34
- - **完整测试矩阵**:内置单元/集成测试、压力与基准测试用例,Security 和 Swagger 模块测试覆盖完整,便于持续优化。
35
-
36
- ## 核心特性
37
-
38
- - 🚀 **高性能 HTTP 栈**:基于 `Bun.serve`,提供轻量
39
- `Application`、`Router`、`Context` 封装。
40
- - 🧩
41
- **依赖注入容器**:`Container`、`@Injectable()`、`@Inject()`、模块系统、生命周期管理与自动依赖计划缓存。
42
- - 🧵
43
- **中间件管道**:支持全局/控制器/方法级中间件,内置日志、错误处理、CORS、文件上传、静态资源等。
44
- - ✅ **输入校验**:声明式验证装饰器,直连 `ValidationError` 与异常过滤器。
45
- - 📡 **WebSocket**:`@WebSocketGateway`、`@OnMessage` 等装饰器级开发体验。
46
- - 📖 **Swagger/OpenAPI**:内置 Swagger 插件,支持 `@ApiTags`、`@ApiOperation`、`@ApiParam`、`@ApiBody`、`@ApiResponse` 等装饰器,自动生成 API 文档和 Swagger UI。
47
- - 🔐 **安全认证**:内置 SecurityModule,支持 JWT 和 OAuth2 认证,提供 `@Auth()` 装饰器进行角色权限控制。
48
- - 📚 **示例与文档**:多语言文档、基础/完整示例、基准脚本与最佳实践。
49
-
50
- ## 架构总览
5
+ [![license](https://img.shields.io/badge/license-MIT-blue)](#license)
6
+
7
+ > A high-performance, decorator-driven DI web framework running on Bun Runtime.
8
+
9
+ - [Why Bun Server](#why-@dangao/bun-server)
10
+ - [Features](#features)
11
+ - [Architecture](#architecture)
12
+ - [Getting Started](#getting-started)
13
+ - [Examples & Extensions](#examples--extensions)
14
+ - [Benchmark Suite](#benchmark-suite)
15
+ - [Docs & Localization](#docs--localization)
16
+ - [Roadmap](#roadmap)
17
+ - [Engineering Guidelines](#engineering-guidelines)
18
+ - [Contributing](#contributing)
19
+ - [License](#license)
20
+ - [Other Languages](#other-languages)
21
+
22
+ ## Why Bun Server
23
+
24
+ - **Native Bun**: built on top of `Bun.serve`, embracing native TS, fast I/O and
25
+ the Bun package manager.
26
+ - **Modern DX**: decorators, metadata and DI everywhere — controllers, services,
27
+ middleware, validation.
28
+ - **Lightweight yet extensible**: modular DI + extension layer + logging
29
+ provider that scales from MVP to enterprise.
30
+ - **Well-tested**: unit, integration, stress and benchmark suites ship with the
31
+ repo.
32
+
33
+ ## Features
34
+
35
+ - 🚀 **Fast HTTP stack** powered by Bun with `Application`, `Router`, `Context`
36
+ and `ResponseBuilder` helpers.
37
+ - 🧩 **Dependency injection container** with `@Injectable`, `@Inject`, module
38
+ metadata, lifecycle management and cached dependency plans.
39
+ - 🧵 **Middleware pipeline** with global/class/method scopes plus built-ins
40
+ (logging, error, CORS, upload, static, ...).
41
+ - ✅ **Input validation** via decorators and `ValidationError` integration.
42
+ - 📡 **WebSocket gateways** with `@WebSocketGateway`, `@OnMessage`, etc.
43
+ - 📚 **Docs & samples** including multi-language docs, benchmark scripts and
44
+ best practices.
45
+
46
+ ## Architecture
51
47
 
52
48
  ```
53
- ┌───────────────────────────────┐
54
- │ Application │
55
- │ (Controllers / Modules / DI) │
56
- └───────────────────────────────┘
57
-
58
- ┌───────────────────────────────┐
59
- Middleware Pipeline │
60
- │ Logging / Error / Custom ... │
61
- └───────────────────────────────┘
62
-
63
- ┌───────────────────────────────┐
64
- │ Router + Context + Response │
65
- └───────────────────────────────┘
66
-
67
- ┌───────────────────────────────┐
68
- │ Bun Runtime │
69
- └───────────────────────────────┘
49
+ Application (Controllers / Modules / DI)
50
+
51
+ Middleware Pipeline
52
+
53
+ Router + Context + Response
54
+
55
+ Bun Runtime
70
56
  ```
71
57
 
72
- ## 快速上手
58
+ ## Getting Started
73
59
 
74
- ### 环境要求
60
+ ### Requirements
75
61
 
76
62
  - Bun ≥ `1.3.3`
77
- - Node.js / npm 只在极少数脚手架场景使用
78
63
 
79
- ### 安装依赖
64
+ ### Install
80
65
 
81
66
  ```bash
82
67
  bun install
83
68
  ```
84
69
 
85
- ### Hello World 控制器
70
+ ### Hello World
86
71
 
87
72
  ```ts
88
73
  import "reflect-metadata";
@@ -111,81 +96,77 @@ app.registerController(HealthController);
111
96
  app.listen();
112
97
  ```
113
98
 
114
- ### 常用脚本
115
-
116
- > 代码位于 `packages/@dangao/bun-server/`,以下命令请在该目录执行。
99
+ ### Useful scripts
117
100
 
118
101
  ```bash
119
- bun --cwd=packages/@dangao/bun-server test # 运行测试
120
- bun --cwd=benchmark run bench # 执行所有基准测试
121
- bun --cwd=benchmark run bench:router # 仅运行路由基准
122
- bun --cwd=benchmark run bench:di # 仅运行 DI 基准
102
+ bun --cwd=packages/@dangao/bun-server test
103
+ bun --cwd=packages/@dangao/bun-server run bench
104
+ bun --cwd=packages/@dangao/bun-server run bench:router
105
+ bun --cwd=packages/@dangao/bun-server run bench:di
123
106
  ```
124
107
 
125
- > 直接在仓库根目录运行 `bun test`
126
- > 会因为工作区结构导致无法找到源文件,请使用上面的命令或先进入
127
- > `packages/@dangao/bun-server/`。
108
+ > Running `bun test` from the repo root fails because Bun only scans the current
109
+ > workspace. Use the commands above or `cd packages/@dangao/bun-server` first.
128
110
 
129
- ## 示例与扩展
111
+ ## Examples & Extensions
130
112
 
131
- - `examples/basic-app.ts`:最小可运行示例,覆盖 DI + Logger + Middleware + Swagger + ConfigModule。
132
- - `examples/full-app.ts`:包含验证、文件上传、WebSocket、复杂控制器,使用 ConfigModule 管理端口与中间件配置。
133
- - `examples/multi-module-app.ts`:多模块示例,展示模块间的依赖关系和服务共享,使用 ConfigModule 统一管理应用配置。
134
- - `examples/auth-app.ts`:完整的认证演示,包含 JWT + OAuth2 认证流程、前端演示页面,并通过 ConfigModule 管理应用标题和端口。
135
- - `packages/bun-server/src/extensions/`:官方扩展(如
136
- LoggerExtension、SwaggerExtension),可用于注册第三方能力。
113
+ - `examples/basic-app.ts`: minimal DI + Logger + Middleware showcase.
114
+ - `examples/full-app.ts`: advanced controllers, validation, uploads, WebSocket.
115
+ - `packages/@dangao/bun-server/src/extensions/`: official extensions (e.g.
116
+ `LoggerExtension`) for plugging in external capabilities.
137
117
 
138
- ## 性能与 Benchmark
118
+ ## Benchmark Suite
139
119
 
140
- `benchmark/` 目录提供可复现脚本:
120
+ Benchmarks live in `benchmark/` and rely on `PerformanceHarness` &
121
+ `StressTester`.
141
122
 
142
- | Script | 描述 |
143
- | ----------------- | ------------------------------------------ |
144
- | `router.bench.ts` | 静态/动态路由命中、handle 以及压力测试 |
145
- | `di.bench.ts` | 单例解析、嵌套依赖解析、工厂解析与并发测试 |
123
+ | Script | Description |
124
+ | ----------------- | --------------------------------------------------------------------- |
125
+ | `router.bench.ts` | static/dynamic route hits, `router.handle` and stress runs |
126
+ | `di.bench.ts` | singleton vs factory resolves, nested dependencies, concurrent stress |
146
127
 
147
- 运行方式:
128
+ Run directly:
148
129
 
149
130
  ```bash
150
131
  bun benchmark/router.bench.ts
151
132
  bun benchmark/di.bench.ts
152
133
  ```
153
134
 
154
- 或使用 `bun run bench*` 脚本批量执行,结果会以表格形式打印。
135
+ Or use `bun run bench*` scripts for convenience.
136
+
137
+ ## Docs & Localization
155
138
 
156
- ## 文档与多语言支持
139
+ - **English** (default): `docs/api.md`, `docs/guide.md`,
140
+ `docs/best-practices.md`, `docs/migration.md`, `docs/extensions.md`.
141
+ - **Chinese**: mirrored under `docs/zh/`. If something is missing, please fall
142
+ back to the English source.
157
143
 
158
- - 中文默认文档位于 `docs/`
159
- - `docs/api.md` - API 参考文档
160
- - `docs/guide.md` - 使用指南
161
- - `docs/extensions.md` - 扩展系统说明(中间件、扩展、模块等)
162
- - `docs/best-practices.md` - 最佳实践
163
- - `docs/migration.md` - 迁移指南
164
- - 英文草稿位于
165
- `docs/en/`,与中文文件结构一致;如果缺失内容,请优先参考中文版本。
144
+ ## Roadmap
166
145
 
167
- ## 路线图
146
+ Detailed milestones and history are tracked in
147
+ [`.roadmap/v0.3.0.md`](./.roadmap/v0.3.0.md).
168
148
 
169
- 详细路线图、阶段目标与完成情况请查阅 [`.roadmap/v0.3.0.md`](./.roadmap/v0.3.0.md)。
149
+ ## Engineering Guidelines
170
150
 
171
- ## 工程规范
151
+ - Comments & log messages **must be in English** to keep the codebase
152
+ international-friendly.
153
+ - Documentation defaults to English; Chinese copies live in `docs/zh/`.
154
+ - Benchmarks belong to `benchmark/` and should run inside Bun environments.
172
155
 
173
- - **注释 & 日志**:统一使用英文,确保国际化友好。
174
- - **Docs**:默认中文,同时在 `docs/en/` 提供英文版本。
175
- - **基准脚本**:存放于 `benchmark/`,运行前请确保在 Bun 环境下执行。
156
+ ## Contributing
176
157
 
177
- ## 贡献指南
158
+ 1. Fork & create a feature branch.
159
+ 2. Run `bun test` (and relevant benchmarks if the change affects performance).
160
+ 3. Submit a PR with a clear description and test evidence.
178
161
 
179
- 1. Fork & 创建特性分支
180
- 2. 提交前运行 `bun test` 和相关 benchmark
181
- 3. 提交 PR 时请附带变更说明与必要的测试数据
162
+ Issues and discussions are welcome for new ideas or perf bottlenecks.
182
163
 
183
- 欢迎通过 Issue / Discussion 反馈需求或性能瓶颈。
164
+ ## License
184
165
 
185
- ## 许可证
166
+ Released under the [MIT License](./LICENSE).
186
167
 
187
- 本项目基于 [MIT License](./LICENSE) 开源。
168
+ ## Other Languages
188
169
 
189
- ## 其他语言
170
+ - [中文 README](./readme_zh.md)
190
171
 
191
- - [English README](./readme_en.md)
172
+ Enjoy building on Bun Server!