@dangao/bun-server 2.0.2 → 2.0.8

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 (57) hide show
  1. package/README.md +21 -8
  2. package/dist/config/config-module.d.ts +3 -0
  3. package/dist/config/config-module.d.ts.map +1 -1
  4. package/dist/core/context.d.ts +10 -0
  5. package/dist/core/context.d.ts.map +1 -1
  6. package/dist/database/service.d.ts +4 -4
  7. package/dist/database/service.d.ts.map +1 -1
  8. package/dist/index.js +236 -94
  9. package/dist/queue/queue-module.d.ts.map +1 -1
  10. package/dist/validation/decorators.d.ts.map +1 -1
  11. package/package.json +5 -4
  12. package/src/ai/providers/anthropic-provider.ts +1 -1
  13. package/src/ai/providers/google-provider.ts +1 -1
  14. package/src/ai/providers/ollama-provider.ts +1 -1
  15. package/src/ai/providers/openai-provider.ts +2 -2
  16. package/src/auth/jwt.ts +1 -1
  17. package/src/cache/interceptors.ts +3 -3
  18. package/src/cache/types.ts +10 -10
  19. package/src/client/runtime.ts +1 -1
  20. package/src/config/config-module.ts +46 -14
  21. package/src/config/service.ts +2 -2
  22. package/src/controller/param-binder.ts +1 -1
  23. package/src/conversation/service.ts +1 -1
  24. package/src/core/application.ts +1 -1
  25. package/src/core/cluster.ts +4 -4
  26. package/src/core/context.ts +71 -0
  27. package/src/dashboard/controller.ts +2 -2
  28. package/src/database/connection-manager.ts +4 -4
  29. package/src/database/service.ts +25 -28
  30. package/src/debug/middleware.ts +2 -2
  31. package/src/di/module-registry.ts +1 -1
  32. package/src/error/handler.ts +3 -3
  33. package/src/events/event-module.ts +4 -4
  34. package/src/files/static-middleware.ts +2 -2
  35. package/src/files/storage.ts +1 -1
  36. package/src/interceptor/builtin/log-interceptor.ts +1 -1
  37. package/src/mcp/server.ts +1 -1
  38. package/src/middleware/builtin/error-handler.ts +2 -2
  39. package/src/middleware/builtin/file-upload.ts +1 -1
  40. package/src/middleware/builtin/rate-limit.ts +1 -1
  41. package/src/middleware/builtin/static-file.ts +2 -2
  42. package/src/prompt/stores/file-store.ts +4 -4
  43. package/src/queue/queue-module.ts +4 -1
  44. package/src/request/body-parser.ts +3 -3
  45. package/src/security/filter.ts +1 -1
  46. package/src/security/guards/guard-registry.ts +1 -1
  47. package/src/session/middleware.ts +1 -1
  48. package/src/session/types.ts +5 -5
  49. package/src/testing/test-client.ts +1 -1
  50. package/src/validation/decorators.ts +70 -2
  51. package/src/validation/rules/common.ts +2 -2
  52. package/tests/config/config-module-extended.test.ts +24 -0
  53. package/tests/core/context.test.ts +52 -0
  54. package/tests/database/database-module.test.ts +87 -0
  55. package/tests/error/error-handler.test.ts +24 -0
  56. package/tests/queue/queue-module.test.ts +27 -0
  57. package/tests/validation/validation.test.ts +18 -0
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Bun Server
2
2
 
3
- [![bun](https://img.shields.io/badge/Bun-1.3%2B-000?logo=bun&logoColor=fff)](https://bun.sh/)
3
+ > Examples: `https://disb-examples-{example-name}.dangaogm.com`
4
+
5
+ [![bun](https://img.shields.io/badge/Bun-1.3.10%2B-000?logo=bun&logoColor=fff)](https://bun.sh/)
4
6
  [![typescript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=fff)](https://www.typescriptlang.org/)
5
7
  [![license](https://img.shields.io/badge/license-MIT-blue)](#license)
6
8
 
@@ -212,7 +214,7 @@ For detailed lifecycle documentation, see
212
214
 
213
215
  ### Requirements
214
216
 
215
- - Bun `1.3.3`
217
+ - Bun >= `1.3.10`
216
218
 
217
219
  ### TypeScript Configuration ⚠️
218
220
 
@@ -563,15 +565,26 @@ macOS/Windows silently ignore it.
563
565
  `docs/error-handling.md`, `docs/request-lifecycle.md`.
564
566
  - **Chinese**: mirrored under `docs/zh/`. If something is missing, please fall
565
567
  back to the English source.
566
- - **Skills & Troubleshooting**: `skills/` directory
567
- - Real-world problems encountered during development with solutions
568
- - Organized by category (events, di, modules, common)
569
- - Each issue includes complete error info, root cause analysis, and fix steps
570
- - [View Skills Repository](./skills/README.md)
568
+ - **Skills & Troubleshooting**:
569
+ - In-repo troubleshooting cases: [`skills/`](./skills/README.md)
570
+ - Agent skills repository: [`bun-server-skills`](https://github.com/dangaogit/bun-server-skills)
571
+ - Install for Cursor (pick one):
572
+ ```bash
573
+ # bun
574
+ bunx skills add https://github.com/dangaogit/bun-server-skills --skill bun-server-best-practices
575
+ # npx
576
+ npx skills add https://github.com/dangaogit/bun-server-skills --skill bun-server-best-practices
577
+ # pnpm
578
+ pnpm dlx skills add https://github.com/dangaogit/bun-server-skills --skill bun-server-best-practices
579
+ # yarn
580
+ yarn dlx skills add https://github.com/dangaogit/bun-server-skills --skill bun-server-best-practices
581
+ # git (manual)
582
+ mkdir -p ~/.cursor/skills && git clone https://github.com/dangaogit/bun-server-skills.git ~/.cursor/skills/bun-server-skills
583
+ ```
571
584
 
572
585
  ## Roadmap
573
586
 
574
- Detailed milestones and history are tracked in the [`.roadmap/`](./.roadmap/)
587
+ Release history and changelogs are tracked in the [`.changelog/`](./.changelog/)
575
588
  directory.
576
589
 
577
590
  ## AI-Assisted Development
@@ -2,6 +2,9 @@ import { type AsyncModuleOptions } from '../di/async-module';
2
2
  import { ConfigService } from './service';
3
3
  import { type ConfigModuleOptions } from './types';
4
4
  export declare class ConfigModule {
5
+ private static readonly DANGEROUS_PATH_SEGMENTS;
6
+ private static isPlainObject;
7
+ private static createSafeContainer;
5
8
  /**
6
9
  * 创建配置模块
7
10
  * @param options - 模块配置
@@ -1 +1 @@
1
- {"version":3,"file":"config-module.d.ts","sourceRoot":"","sources":["../../src/config/config-module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEzE,qBAGa,YAAY;IACvB;;;OAGG;WACW,OAAO,CACnB,OAAO,GAAE,mBAAwB,GAChC,OAAO,YAAY;IAsDtB;;;;OAIG;WACW,YAAY,CACxB,YAAY,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GACpD,OAAO,YAAY;IAkCtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAQ1B;;OAEG;WACiB,sBAAsB,CACxC,OAAO,EAAE,aAAa,EACtB,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC;IA+BhB;;OAEG;mBACkB,sBAAsB;IAuE3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAwDvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAwB9B"}
1
+ {"version":3,"file":"config-module.d.ts","sourceRoot":"","sources":["../../src/config/config-module.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEzE,qBAGa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAI5C;IAEH,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAGlC;;;OAGG;WACW,OAAO,CACnB,OAAO,GAAE,mBAAwB,GAChC,OAAO,YAAY;IAsDtB;;;;OAIG;WACW,YAAY,CACxB,YAAY,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GACpD,OAAO,YAAY;IAkCtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAQ1B;;OAEG;WACiB,sBAAsB,CACxC,OAAO,EAAE,aAAa,EACtB,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC;IA+BhB;;OAEG;mBACkB,sBAAsB;IAuE3C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAwDvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;CAuC9B"}
@@ -5,6 +5,7 @@ import { type URLSearchParams, URL } from 'url';
5
5
  * 封装 Request 和 Response,提供便捷的访问方法
6
6
  */
7
7
  export declare class Context {
8
+ private static readonly ERROR_REDACTED_KEYS;
8
9
  /**
9
10
  * 原始请求对象
10
11
  */
@@ -120,5 +121,14 @@ export declare class Context {
120
121
  * @returns Response 对象
121
122
  */
122
123
  createResponse(body?: unknown, init?: ResponseInit): Response;
124
+ /**
125
+ * 创建错误响应(自动过滤敏感字段)
126
+ * @param body - 错误响应体
127
+ * @param init - 响应初始化选项
128
+ * @returns Response 对象
129
+ */
130
+ createErrorResponse(body?: unknown, init?: ResponseInit): Response;
131
+ private sanitizeErrorPayload;
132
+ private sanitizeValue;
123
133
  }
124
134
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAEhD;;;GAGG;AACH,qBAAa,OAAO;IAClB;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACI,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAE3B;;OAEG;IACH,SAAgB,GAAG,EAAE,GAAG,CAAC;IAEzB;;OAEG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,SAAgB,KAAK,EAAE,eAAe,CAAC;IAEvC;;OAEG;IACI,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAE3C;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACI,eAAe,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACI,UAAU,EAAE,MAAM,CAAO;IAEhC;;OAEG;IACI,KAAK,EAAE,gBAAgB,EAAE,CAAM;IAEtC;;OAEG;IACH,OAAO,CAAC,KAAK,CAAC,CAAU;IAExB;;OAEG;IACH,OAAO,CAAC,WAAW,CAAkB;gBAElB,OAAO,EAAE,OAAO;IAUnC;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQxC;;;OAGG;IACH,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED;;;OAGG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,OAAO,EAG5B;IAED;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI3C;;;OAGG;IACI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ5C;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhD;;;;OAIG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI5C;;;;OAIG;IACI,WAAW,IAAI,MAAM;IAmB5B;;;;OAIG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlD;;;OAGG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIpC;;;;;OAKG;IACI,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ;CA2BrE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAEhD;;;GAGG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IACnF;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACI,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAE3B;;OAEG;IACH,SAAgB,GAAG,EAAE,GAAG,CAAC;IAEzB;;OAEG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,SAAgB,KAAK,EAAE,eAAe,CAAC;IAEvC;;OAEG;IACI,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM;IAE3C;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACI,eAAe,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACI,UAAU,EAAE,MAAM,CAAO;IAEhC;;OAEG;IACI,KAAK,EAAE,gBAAgB,EAAE,CAAM;IAEtC;;OAEG;IACH,OAAO,CAAC,KAAK,CAAC,CAAU;IAExB;;OAEG;IACH,OAAO,CAAC,WAAW,CAAkB;gBAElB,OAAO,EAAE,OAAO;IAUnC;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQxC;;;OAGG;IACH,IAAW,IAAI,IAAI,OAAO,CAEzB;IAED;;;OAGG;IACH,IAAW,IAAI,CAAC,IAAI,EAAE,OAAO,EAG5B;IAED;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI3C;;;OAGG;IACI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ5C;;;;OAIG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIhD;;;;OAIG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI5C;;;;OAIG;IACI,WAAW,IAAI,MAAM;IAmB5B;;;;OAIG;IACI,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlD;;;OAGG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIpC;;;;;OAKG;IACI,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ;IA4BpE;;;;;OAKG;IACI,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ;IAWzE,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,aAAa;CAqCtB"}
@@ -59,13 +59,13 @@ export declare class DatabaseService {
59
59
  private querySqlite;
60
60
  /**
61
61
  * Bun.SQL 查询实现(PostgreSQL/MySQL)
62
- * 注意:Bun.SQL 主要使用模板字符串,但为了兼容性,我们尝试支持参数化查询
62
+ * 通过模板字符串调用 Bun.SQL,确保参数走 Bun.SQL 转义逻辑
63
63
  */
64
64
  private queryBunSQL;
65
65
  /**
66
- * 将参数插入到 SQL 中(用于 Bun.SQL 模板字符串)
67
- * 注意:这只是临时方案,Bun.SQL 的模板字符串会自动处理 SQL 注入防护
66
+ * SQL ? 占位符参数转换为模板字符串片段
67
+ * 让参数通过 Bun.SQL values 通道注入,避免手工拼接 SQL
68
68
  */
69
- private interpolateParams;
69
+ private buildTemplateFromSql;
70
70
  }
71
71
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/database/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,OAAO,CAAwB;gBAEpB,OAAO,EAAE,qBAAqB;IAQjD;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;OAEG;IACI,YAAY;;;;;;IAInB;;OAEG;IACI,aAAa,IAAI,OAAO;IAI/B;;OAEG;IACH,IAAW,MAAM,IAAI,qBAAqB,CAEzC;IAED;;OAEG;IACI,eAAe,IAAI,cAAc,CAAC,MAAM,CAAC;IAIhD;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ5C;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAI1C;;;OAGG;IACI,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAgB9E;;OAEG;IACH,OAAO,CAAC,WAAW;IA6BnB;;;OAGG;YACW,WAAW;IAiDzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAkB1B"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/database/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBACa,eAAe;IAC1B,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,OAAO,CAAwB;gBAEpB,OAAO,EAAE,qBAAqB;IAQjD;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC;;OAEG;IACI,YAAY;;;;;;IAInB;;OAEG;IACI,aAAa,IAAI,OAAO;IAI/B;;OAEG;IACH,IAAW,MAAM,IAAI,qBAAqB,CAEzC;IAED;;OAEG;IACI,eAAe,IAAI,cAAc,CAAC,MAAM,CAAC;IAIhD;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ5C;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAI1C;;;OAGG;IACI,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAgB9E;;OAEG;IACH,OAAO,CAAC,WAAW;IA6BnB;;;OAGG;YACW,WAAW;IA+CzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAiB7B"}