@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.
- package/dist/cache/cache-module.d.ts +9 -0
- package/dist/cache/cache-module.d.ts.map +1 -0
- package/dist/cache/decorators.d.ts +110 -0
- package/dist/cache/decorators.d.ts.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/service.d.ts +76 -0
- package/dist/cache/service.d.ts.map +1 -0
- package/dist/cache/types.d.ts +160 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/controller/decorators.d.ts +9 -1
- package/dist/controller/decorators.d.ts.map +1 -1
- package/dist/controller/param-binder.d.ts +4 -1
- package/dist/controller/param-binder.d.ts.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1123 -25
- package/dist/middleware/pipeline.d.ts.map +1 -1
- package/dist/queue/decorators.d.ts +63 -0
- package/dist/queue/decorators.d.ts.map +1 -0
- package/dist/queue/index.d.ts +6 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/queue-module.d.ts +9 -0
- package/dist/queue/queue-module.d.ts.map +1 -0
- package/dist/queue/service.d.ts +93 -0
- package/dist/queue/service.d.ts.map +1 -0
- package/dist/queue/types.d.ts +204 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/router/router.d.ts +16 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/session/decorators.d.ts +16 -0
- package/dist/session/decorators.d.ts.map +1 -0
- package/dist/session/index.d.ts +8 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/middleware.d.ts +8 -0
- package/dist/session/middleware.d.ts.map +1 -0
- package/dist/session/service.d.ts +86 -0
- package/dist/session/service.d.ts.map +1 -0
- package/dist/session/session-module.d.ts +9 -0
- package/dist/session/session-module.d.ts.map +1 -0
- package/dist/session/types.d.ts +193 -0
- package/dist/session/types.d.ts.map +1 -0
- package/package.json +1 -1
- 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
package/readme.md
CHANGED
|
@@ -2,87 +2,72 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://bun.sh/)
|
|
4
4
|
[](https://www.typescriptlang.org/)
|
|
5
|
-
[](
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- 🔐 **安全认证**:内置 SecurityModule,支持 JWT 和 OAuth2 认证,提供 `@Auth()` 装饰器进行角色权限控制。
|
|
48
|
-
- 📚 **示例与文档**:多语言文档、基础/完整示例、基准脚本与最佳实践。
|
|
49
|
-
|
|
50
|
-
## 架构总览
|
|
5
|
+
[](#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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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=
|
|
121
|
-
bun --cwd=
|
|
122
|
-
bun --cwd=
|
|
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
|
-
>
|
|
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
|
|
132
|
-
- `examples/full-app.ts
|
|
133
|
-
- `
|
|
134
|
-
|
|
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
|
-
##
|
|
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` |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
180
|
-
2. 提交前运行 `bun test` 和相关 benchmark
|
|
181
|
-
3. 提交 PR 时请附带变更说明与必要的测试数据
|
|
162
|
+
Issues and discussions are welcome for new ideas or perf bottlenecks.
|
|
182
163
|
|
|
183
|
-
|
|
164
|
+
## License
|
|
184
165
|
|
|
185
|
-
|
|
166
|
+
Released under the [MIT License](./LICENSE).
|
|
186
167
|
|
|
187
|
-
|
|
168
|
+
## Other Languages
|
|
188
169
|
|
|
189
|
-
|
|
170
|
+
- [中文 README](./readme_zh.md)
|
|
190
171
|
|
|
191
|
-
|
|
172
|
+
Enjoy building on Bun Server!
|