@dangao/bun-server 1.9.0 → 1.12.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.
Files changed (209) hide show
  1. package/README.md +79 -6
  2. package/dist/cache/cache-module.d.ts +6 -0
  3. package/dist/cache/cache-module.d.ts.map +1 -1
  4. package/dist/client/generator.d.ts +16 -0
  5. package/dist/client/generator.d.ts.map +1 -0
  6. package/dist/client/index.d.ts +4 -0
  7. package/dist/client/index.d.ts.map +1 -0
  8. package/dist/client/runtime.d.ts +15 -0
  9. package/dist/client/runtime.d.ts.map +1 -0
  10. package/dist/client/types.d.ts +36 -0
  11. package/dist/client/types.d.ts.map +1 -0
  12. package/dist/config/config-module.d.ts +7 -0
  13. package/dist/config/config-module.d.ts.map +1 -1
  14. package/dist/config/index.d.ts +1 -1
  15. package/dist/config/index.d.ts.map +1 -1
  16. package/dist/config/service.d.ts +13 -0
  17. package/dist/config/service.d.ts.map +1 -1
  18. package/dist/config/types.d.ts +10 -0
  19. package/dist/config/types.d.ts.map +1 -1
  20. package/dist/core/application.d.ts +7 -0
  21. package/dist/core/application.d.ts.map +1 -1
  22. package/dist/core/apply-decorators.d.ts +6 -0
  23. package/dist/core/apply-decorators.d.ts.map +1 -0
  24. package/dist/core/cluster.d.ts +47 -0
  25. package/dist/core/cluster.d.ts.map +1 -0
  26. package/dist/core/index.d.ts +1 -0
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/server.d.ts +8 -0
  29. package/dist/core/server.d.ts.map +1 -1
  30. package/dist/dashboard/controller.d.ts +55 -0
  31. package/dist/dashboard/controller.d.ts.map +1 -0
  32. package/dist/dashboard/dashboard-extension.d.ts +20 -0
  33. package/dist/dashboard/dashboard-extension.d.ts.map +1 -0
  34. package/dist/dashboard/dashboard-module.d.ts +13 -0
  35. package/dist/dashboard/dashboard-module.d.ts.map +1 -0
  36. package/dist/dashboard/index.d.ts +4 -0
  37. package/dist/dashboard/index.d.ts.map +1 -0
  38. package/dist/dashboard/types.d.ts +16 -0
  39. package/dist/dashboard/types.d.ts.map +1 -0
  40. package/dist/dashboard/ui.d.ts +7 -0
  41. package/dist/dashboard/ui.d.ts.map +1 -0
  42. package/dist/database/database-module.d.ts +7 -0
  43. package/dist/database/database-module.d.ts.map +1 -1
  44. package/dist/debug/debug-module.d.ts +13 -0
  45. package/dist/debug/debug-module.d.ts.map +1 -0
  46. package/dist/debug/debug-ui-middleware.d.ts +8 -0
  47. package/dist/debug/debug-ui-middleware.d.ts.map +1 -0
  48. package/dist/debug/index.d.ts +5 -0
  49. package/dist/debug/index.d.ts.map +1 -0
  50. package/dist/debug/middleware.d.ts +12 -0
  51. package/dist/debug/middleware.d.ts.map +1 -0
  52. package/dist/debug/recorder.d.ts +61 -0
  53. package/dist/debug/recorder.d.ts.map +1 -0
  54. package/dist/debug/types.d.ts +48 -0
  55. package/dist/debug/types.d.ts.map +1 -0
  56. package/dist/debug/ui.d.ts +6 -0
  57. package/dist/debug/ui.d.ts.map +1 -0
  58. package/dist/di/async-module.d.ts +49 -0
  59. package/dist/di/async-module.d.ts.map +1 -0
  60. package/dist/di/lifecycle.d.ts +49 -0
  61. package/dist/di/lifecycle.d.ts.map +1 -0
  62. package/dist/di/module-registry.d.ts +24 -0
  63. package/dist/di/module-registry.d.ts.map +1 -1
  64. package/dist/index.d.ts +9 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +1887 -35
  67. package/dist/router/route.d.ts +5 -7
  68. package/dist/router/route.d.ts.map +1 -1
  69. package/dist/swagger/generator.d.ts +10 -0
  70. package/dist/swagger/generator.d.ts.map +1 -1
  71. package/dist/testing/test-client.d.ts +49 -0
  72. package/dist/testing/test-client.d.ts.map +1 -0
  73. package/dist/testing/testing-module.d.ts +90 -0
  74. package/dist/testing/testing-module.d.ts.map +1 -0
  75. package/dist/websocket/registry.d.ts +1 -6
  76. package/dist/websocket/registry.d.ts.map +1 -1
  77. package/docs/async-module.md +59 -0
  78. package/docs/client-generation.md +100 -0
  79. package/docs/cluster.md +81 -0
  80. package/docs/custom-decorators.md +1 -7
  81. package/docs/dashboard.md +54 -0
  82. package/docs/debug.md +58 -0
  83. package/docs/extensions.md +0 -2
  84. package/docs/guide.md +0 -1
  85. package/docs/lifecycle.md +72 -0
  86. package/docs/testing.md +110 -0
  87. package/docs/zh/async-module.md +98 -0
  88. package/docs/zh/client-generation.md +92 -0
  89. package/docs/zh/cluster.md +74 -0
  90. package/docs/zh/custom-decorators.md +1 -7
  91. package/docs/zh/dashboard.md +69 -0
  92. package/docs/zh/debug.md +81 -0
  93. package/docs/zh/extensions.md +0 -2
  94. package/docs/zh/guide.md +0 -1
  95. package/docs/zh/lifecycle.md +87 -0
  96. package/docs/zh/migration.md +0 -5
  97. package/docs/zh/testing.md +119 -0
  98. package/package.json +4 -4
  99. package/src/cache/cache-module.ts +25 -0
  100. package/src/client/generator.ts +36 -0
  101. package/src/client/index.ts +8 -0
  102. package/src/client/runtime.ts +101 -0
  103. package/src/client/types.ts +38 -0
  104. package/src/config/config-module.ts +44 -4
  105. package/src/config/index.ts +1 -0
  106. package/src/config/service.ts +50 -0
  107. package/src/config/types.ts +12 -0
  108. package/src/core/application.ts +37 -0
  109. package/src/core/apply-decorators.ts +31 -0
  110. package/src/core/cluster.ts +143 -0
  111. package/src/core/index.ts +1 -0
  112. package/src/core/server.ts +14 -1
  113. package/src/dashboard/controller.ts +227 -0
  114. package/src/dashboard/dashboard-extension.ts +26 -0
  115. package/src/dashboard/dashboard-module.ts +38 -0
  116. package/src/dashboard/index.ts +3 -0
  117. package/src/dashboard/types.ts +16 -0
  118. package/src/dashboard/ui.ts +219 -0
  119. package/src/database/database-module.ts +20 -0
  120. package/src/debug/debug-module.ts +70 -0
  121. package/src/debug/debug-ui-middleware.ts +110 -0
  122. package/src/debug/index.ts +9 -0
  123. package/src/debug/middleware.ts +126 -0
  124. package/src/debug/recorder.ts +141 -0
  125. package/src/debug/types.ts +49 -0
  126. package/src/debug/ui.ts +393 -0
  127. package/src/di/async-module.ts +141 -0
  128. package/src/di/lifecycle.ts +117 -0
  129. package/src/di/module-registry.ts +75 -0
  130. package/src/index.ts +35 -0
  131. package/src/router/route.ts +20 -20
  132. package/src/swagger/generator.ts +100 -0
  133. package/src/testing/test-client.ts +112 -0
  134. package/src/testing/testing-module.ts +238 -0
  135. package/src/websocket/registry.ts +3 -16
  136. package/tests/auth/auth-decorators.test.ts +0 -1
  137. package/tests/auth/oauth2-service.test.ts +0 -1
  138. package/tests/cache/cache-decorators-extended.test.ts +0 -1
  139. package/tests/cache/cache-decorators.test.ts +0 -1
  140. package/tests/cache/cache-interceptors.test.ts +0 -1
  141. package/tests/cache/cache-module.test.ts +0 -1
  142. package/tests/cache/cache-service-proxy.test.ts +0 -1
  143. package/tests/client/client-generator.test.ts +142 -0
  144. package/tests/config/config-center-integration.test.ts +0 -1
  145. package/tests/config/config-module-extended.test.ts +0 -1
  146. package/tests/config/config-module.test.ts +0 -1
  147. package/tests/controller/controller.test.ts +0 -1
  148. package/tests/controller/param-binder.test.ts +0 -1
  149. package/tests/controller/path-combination.test.ts +0 -1
  150. package/tests/core/application.test.ts +34 -0
  151. package/tests/core/apply-decorators.test.ts +109 -0
  152. package/tests/core/cluster.test.ts +32 -0
  153. package/tests/dashboard/dashboard-module.test.ts +85 -0
  154. package/tests/database/database-module.test.ts +0 -1
  155. package/tests/database/orm.test.ts +0 -1
  156. package/tests/database/postgres-mysql-integration.test.ts +0 -1
  157. package/tests/database/transaction.test.ts +0 -1
  158. package/tests/debug/debug-module.test.ts +141 -0
  159. package/tests/di/async-module.test.ts +125 -0
  160. package/tests/di/container.test.ts +0 -1
  161. package/tests/di/lifecycle.test.ts +140 -0
  162. package/tests/error/error-handler.test.ts +0 -1
  163. package/tests/events/event-decorators.test.ts +0 -1
  164. package/tests/events/event-listener-scanner.test.ts +0 -1
  165. package/tests/events/event-module.test.ts +0 -1
  166. package/tests/extensions/logger-module.test.ts +0 -1
  167. package/tests/health/health-module.test.ts +0 -1
  168. package/tests/integration/oauth2-e2e.test.ts +0 -1
  169. package/tests/integration/session-e2e.test.ts +0 -1
  170. package/tests/interceptor/base-interceptor.test.ts +0 -1
  171. package/tests/interceptor/builtin/cache-interceptor.test.ts +0 -1
  172. package/tests/interceptor/builtin/log-interceptor.test.ts +0 -1
  173. package/tests/interceptor/builtin/permission-interceptor.test.ts +0 -1
  174. package/tests/interceptor/interceptor-advanced-integration.test.ts +0 -1
  175. package/tests/interceptor/interceptor-chain.test.ts +0 -1
  176. package/tests/interceptor/interceptor-integration.test.ts +0 -1
  177. package/tests/interceptor/interceptor-metadata.test.ts +0 -1
  178. package/tests/interceptor/interceptor-registry.test.ts +0 -1
  179. package/tests/interceptor/perf/interceptor-performance.test.ts +0 -1
  180. package/tests/metrics/metrics-module.test.ts +0 -1
  181. package/tests/microservice/config-center.test.ts +0 -1
  182. package/tests/microservice/service-client-decorators.test.ts +0 -1
  183. package/tests/microservice/service-registry-decorators.test.ts +0 -1
  184. package/tests/microservice/service-registry.test.ts +0 -1
  185. package/tests/middleware/builtin/middleware-builtin-extended.test.ts +0 -1
  186. package/tests/middleware/builtin/rate-limit.test.ts +0 -1
  187. package/tests/middleware/middleware-decorators.test.ts +0 -1
  188. package/tests/middleware/middleware-pipeline.test.ts +0 -1
  189. package/tests/middleware/middleware.test.ts +0 -1
  190. package/tests/perf/optimization.test.ts +0 -1
  191. package/tests/queue/queue-decorators.test.ts +0 -1
  192. package/tests/queue/queue-module.test.ts +0 -1
  193. package/tests/queue/queue-service.test.ts +0 -1
  194. package/tests/router/router-decorators.test.ts +0 -1
  195. package/tests/router/router-extended.test.ts +0 -1
  196. package/tests/security/guards/guards-integration.test.ts +0 -1
  197. package/tests/security/guards/guards.test.ts +0 -1
  198. package/tests/security/guards/reflector.test.ts +0 -1
  199. package/tests/security/security-filter.test.ts +0 -1
  200. package/tests/security/security-module-extended.test.ts +0 -1
  201. package/tests/security/security-module.test.ts +0 -1
  202. package/tests/session/session-decorators.test.ts +0 -1
  203. package/tests/session/session-module.test.ts +0 -1
  204. package/tests/swagger/decorators.test.ts +0 -1
  205. package/tests/swagger/swagger-module.test.ts +0 -1
  206. package/tests/swagger/ui.test.ts +0 -1
  207. package/tests/testing/testing-module.test.ts +129 -0
  208. package/tests/validation/class-validator.test.ts +0 -1
  209. package/tests/validation/controller-validation.test.ts +0 -1
package/README.md CHANGED
@@ -46,6 +46,22 @@
46
46
  - 📡 **WebSocket gateways** with `@WebSocketGateway`, `@OnMessage`, etc.
47
47
  - 📚 **Docs & samples** including multi-language docs, benchmark scripts and
48
48
  best practices.
49
+ - 🧪 **Testing module** with `Test.createTestingModule()`, provider override,
50
+ and built-in HTTP test client.
51
+ - 🔄 **Lifecycle hooks** — `OnModuleInit`, `OnModuleDestroy`,
52
+ `OnApplicationBootstrap`, `OnApplicationShutdown`.
53
+ - ⚡ **Async module config** — `forRootAsync()` with factory injection on
54
+ ConfigModule, DatabaseModule, CacheModule and more.
55
+ - 🔌 **Type-safe client generation** — extract route manifests and create
56
+ typed API clients from controller metadata.
57
+ - 🎨 **Decorator composition** — `applyDecorators()` to merge multiple
58
+ decorators into one reusable decorator.
59
+ - 📊 **Built-in dashboard** — `DashboardModule` provides a zero-dependency
60
+ monitoring web UI with system info, routes and health status.
61
+ - 🐛 **Request replay / debug** — `DebugModule` records requests in a ring
62
+ buffer with a debug UI for inspection and replay.
63
+ - 🖥️ **Zero-config cluster** — `ClusterManager` auto-spawns reusePort
64
+ workers matching CPU core count.
49
65
 
50
66
  ## Architecture
51
67
 
@@ -368,6 +384,8 @@ Examples are organized by difficulty and feature category:
368
384
  - `multi-module-app.ts` - Module dependencies and organization
369
385
  - `context-scope-app.ts` - Request scoping and ContextService
370
386
  - `full-app.ts` - Validation, uploads, static files, WebSocket
387
+ - `lifecycle-app.ts` - Lifecycle hooks (OnModuleInit, OnModuleDestroy, etc.)
388
+ - `async-config-app.ts` - Async module config with `forRootAsync()`
371
389
 
372
390
  - **[Official Modules](./examples/02-official-modules/)** - Ready-to-use modules
373
391
  - `auth-app.ts` - JWT + OAuth2 authentication (with Web UI)
@@ -376,15 +394,21 @@ Examples are organized by difficulty and feature category:
376
394
  - `orm-app.ts` - Entity + Repository pattern
377
395
  - `cache-app.ts` - Caching with decorators
378
396
  - `queue-app.ts` - Task queues and Cron jobs
397
+ - `dashboard-app.ts` - Built-in monitoring dashboard (with Web UI)
379
398
 
380
399
  - **[Advanced](./examples/03-advanced/)** - Custom framework extensions
381
400
  - `custom-decorator-app.ts` - Create custom decorators
401
+ - `apply-decorators-app.ts` - Decorator composition with `applyDecorators()`
402
+ - `testing-app.ts` - TestingModule with mock providers and HTTP client
403
+ - `type-safe-client-app.ts` - Type-safe API client from controller metadata
404
+ - `debug-app.ts` - Request recording and replay (with Web UI)
382
405
  - `websocket-chat-app.ts` - Complete WebSocket chat with rooms (with Web UI)
383
406
  - `microservice-app.ts` - Microservices architecture
384
407
 
385
408
  - **[Real World](./examples/04-real-world/)** - Production-ready examples
386
409
  - `database-test-app.ts` - Database connection tester (Web UI)
387
410
  - `perf/app.ts` - Performance benchmarking
411
+ - `perf/cluster-app.ts` - Zero-config cluster with `ClusterManager`
388
412
 
389
413
  ### 🔑 Symbol + Interface Pattern
390
414
 
@@ -433,22 +457,71 @@ learning paths, difficulty ratings, and usage scenarios.
433
457
 
434
458
  ## Benchmark Suite
435
459
 
436
- Benchmarks live in `benchmark/` and rely on `PerformanceHarness` &
437
- `StressTester`.
460
+ ### Internal Micro-benchmarks
461
+
462
+ `PerformanceHarness` & `StressTester` based benchmarks:
438
463
 
439
464
  | Script | Description |
440
465
  | ----------------- | --------------------------------------------------------------------- |
441
466
  | `router.bench.ts` | static/dynamic route hits, `router.handle` and stress runs |
442
467
  | `di.bench.ts` | singleton vs factory resolves, nested dependencies, concurrent stress |
443
468
 
444
- Run directly:
445
-
446
469
  ```bash
447
470
  bun benchmark/router.bench.ts
448
471
  bun benchmark/di.bench.ts
449
472
  ```
450
473
 
451
- Or use `bun run bench*` scripts for convenience.
474
+ ### Framework Comparison (bun-server vs Express vs NestJS)
475
+
476
+ Real HTTP load testing with [wrk](https://github.com/wg/wrk), comparing
477
+ bun-server against Express 5 and NestJS 11. All frameworks run on the same Bun
478
+ runtime to isolate framework overhead.
479
+
480
+ **Prerequisites:** wrk (`brew install wrk` / `apt install wrk`). The script
481
+ automatically raises `ulimit -n` to 10240 for child processes.
482
+
483
+ ```bash
484
+ bun benchmark/run-wrk-compare.ts # full comparison (3 tiers)
485
+ TIER=0 bun benchmark/run-wrk-compare.ts # Light tier only
486
+ bun benchmark/run-wrk.ts # bun-server only (3 tiers)
487
+ ```
488
+
489
+ > **Environment:** Apple M2 Pro (8P + 4E cores) / darwin arm64 / Bun 1.3.10
490
+
491
+ #### Req/Sec (Light: -t2 -c50 -d10s)
492
+
493
+ | Endpoint | bun-server | Express | NestJS |
494
+ |-----------------------|--------------|----------|----------|
495
+ | GET /ping | **31.41k** | 30.01k | 26.52k |
496
+ | GET /json | **28.22k** | 25.99k | 23.64k |
497
+ | GET /users/:id | **30.88k** | 29.91k | 25.62k |
498
+ | GET /search?q= | **29.96k** | 28.70k | 25.17k |
499
+ | POST /users | **27.65k** | 21.37k | 19.38k |
500
+ | POST /users/validated | **26.60k** | 21.28k | 18.93k |
501
+ | GET /middleware | **29.52k** | 28.57k | 24.69k |
502
+ | GET /headers | **30.98k** | 29.57k | 26.43k |
503
+ | GET /io | **21.37k** | 19.46k | 18.49k |
504
+
505
+ Zero errors across all frameworks and tiers. See the full report for Medium and
506
+ Heavy tier results.
507
+
508
+ > 📊 Full comparison report (3 tiers, latency breakdown, per-framework
509
+ > details): [`benchmark/REPORT_COMPARE.md`](./benchmark/REPORT_COMPARE.md)
510
+ >
511
+ > 📋 Single-framework detailed report:
512
+ > [`benchmark/REPORT.md`](./benchmark/REPORT.md)
513
+
514
+ ### Multi-process Benchmark (reusePort, Linux only)
515
+
516
+ ```bash
517
+ bun benchmark/run-wrk-cluster.ts # default: 1 worker per CPU core
518
+ WORKERS=4 bun benchmark/run-wrk-cluster.ts
519
+ ```
520
+
521
+ Spawns N workers sharing the same port via `SO_REUSEPORT`. The kernel
522
+ distributes connections across processes. Report saved to
523
+ `benchmark/REPORT_CLUSTER.md`. Note: `reusePort` only works on **Linux**;
524
+ macOS/Windows silently ignore it.
452
525
 
453
526
  ## Docs & Localization
454
527
 
@@ -525,6 +598,6 @@ Released under the [MIT License](./LICENSE).
525
598
 
526
599
  ## Other Languages
527
600
 
528
- - [中文 README](./readme_zh.md)
601
+ - [中文 README](./README_ZH.md)
529
602
 
530
603
  Enjoy building on Bun Server!
@@ -1,3 +1,4 @@
1
+ import { type AsyncModuleOptions } from '../di/async-module';
1
2
  import { type CacheModuleOptions } from './types';
2
3
  import { CachePostProcessor } from './service-proxy';
3
4
  /**
@@ -14,6 +15,11 @@ export declare class CacheModule {
14
15
  * @param options - 模块配置
15
16
  */
16
17
  static forRoot(options?: CacheModuleOptions): typeof CacheModule;
18
+ /**
19
+ * 异步创建缓存模块
20
+ * @param asyncOptions - 异步配置选项
21
+ */
22
+ static forRootAsync(asyncOptions: AsyncModuleOptions<CacheModuleOptions>): typeof CacheModule;
17
23
  /**
18
24
  * 获取缓存后处理器
19
25
  * 用于在应用启动时注册到 DI 容器
@@ -1 +1 @@
1
- {"version":3,"file":"cache-module.d.ts","sourceRoot":"","sources":["../../src/cache/cache-module.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,kBAAkB,EAExB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,0BAA0B,eAAoD,CAAC;AAE5F,qBAGa,WAAW;IACtB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa,CAAmC;IAE/D;;;OAGG;WACW,OAAO,CACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,WAAW;IAwDrB;;;OAGG;WACW,gBAAgB,IAAI,kBAAkB,GAAG,IAAI;IAI3D;;OAEG;WACW,KAAK,IAAI,IAAI;CAI5B"}
1
+ {"version":3,"file":"cache-module.d.ts","sourceRoot":"","sources":["../../src/cache/cache-module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;AAGrF,OAAO,EAIL,KAAK,kBAAkB,EAExB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,0BAA0B,eAAoD,CAAC;AAE5F,qBAGa,WAAW;IACtB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa,CAAmC;IAE/D;;;OAGG;WACW,OAAO,CACnB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,WAAW;IAwDrB;;;OAGG;WACW,YAAY,CACxB,YAAY,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,GACnD,OAAO,WAAW;IAkBrB;;;OAGG;WACW,gBAAgB,IAAI,kBAAkB,GAAG,IAAI;IAI3D;;OAEG;WACW,KAAK,IAAI,IAAI;CAI5B"}
@@ -0,0 +1,16 @@
1
+ import type { RouteManifest } from './types';
2
+ /**
3
+ * 客户端清单生成器
4
+ * 从 RouteRegistry 提取路由元数据,生成路由清单
5
+ */
6
+ export declare class ClientGenerator {
7
+ /**
8
+ * 从当前 RouteRegistry 生成路由清单
9
+ */
10
+ static generate(): RouteManifest;
11
+ /**
12
+ * 生成清单的 JSON 字符串
13
+ */
14
+ static generateJSON(): string;
15
+ }
16
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/client/generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAEjE;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;OAEG;WACW,QAAQ,IAAI,aAAa;IAkBvC;;OAEG;WACW,YAAY,IAAI,MAAM;CAGrC"}
@@ -0,0 +1,4 @@
1
+ export { ClientGenerator } from './generator';
2
+ export { createClient } from './runtime';
3
+ export type { RouteManifest, RouteManifestEntry, ClientConfig, ClientRequestOptions, } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ClientConfig, ClientRequestOptions, RouteManifest } from './types';
2
+ /**
3
+ * 从路由清单创建类型安全的 API 客户端
4
+ *
5
+ * 客户端结构按控制器名称(去除 Controller 后缀,转小写)分组,
6
+ * 每个方法名直接映射为函数调用。
7
+ *
8
+ * 示例:
9
+ * ```
10
+ * const client = createClient(manifest, { baseUrl: 'http://localhost:3000' });
11
+ * const result = await client.user.getUser({ params: { id: '1' } });
12
+ * ```
13
+ */
14
+ export declare function createClient(manifest: RouteManifest, config: ClientConfig): Record<string, Record<string, (options?: ClientRequestOptions) => Promise<unknown>>>;
15
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/client/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA4BjF;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,YAAY,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAyDtF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 路由清单中的单个端点描述
3
+ */
4
+ export interface RouteManifestEntry {
5
+ method: string;
6
+ path: string;
7
+ controllerName: string;
8
+ methodName: string;
9
+ }
10
+ /**
11
+ * 完整的路由清单
12
+ */
13
+ export interface RouteManifest {
14
+ routes: RouteManifestEntry[];
15
+ }
16
+ /**
17
+ * 客户端请求选项
18
+ */
19
+ export interface ClientRequestOptions {
20
+ params?: Record<string, string>;
21
+ query?: Record<string, string>;
22
+ body?: unknown;
23
+ headers?: Record<string, string>;
24
+ }
25
+ /**
26
+ * 客户端配置
27
+ */
28
+ export interface ClientConfig {
29
+ baseUrl: string;
30
+ headers?: Record<string, string>;
31
+ /**
32
+ * 自定义 fetch 实现(可选,用于测试)
33
+ */
34
+ fetch?: typeof fetch;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB"}
@@ -1,3 +1,4 @@
1
+ import { type AsyncModuleOptions } from '../di/async-module';
1
2
  import { ConfigService } from './service';
2
3
  import { type ConfigModuleOptions } from './types';
3
4
  export declare class ConfigModule {
@@ -6,6 +7,12 @@ export declare class ConfigModule {
6
7
  * @param options - 模块配置
7
8
  */
8
9
  static forRoot(options?: ConfigModuleOptions): typeof ConfigModule;
10
+ /**
11
+ * 异步创建配置模块
12
+ * 支持 configFiles 选项从 .json / .jsonc / .json5 文件异步加载配置
13
+ * @param asyncOptions - 异步配置选项
14
+ */
15
+ static forRootAsync(asyncOptions: AsyncModuleOptions<ConfigModuleOptions>): typeof ConfigModule;
9
16
  /**
10
17
  * 获取环境变量快照
11
18
  * 方便测试和未来扩展(如 .env 文件解析)
@@ -1 +1 @@
1
- {"version":3,"file":"config-module.d.ts","sourceRoot":"","sources":["../../src/config/config-module.ts"],"names":[],"mappings":"AAKA,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;;;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;IAyE3C;;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;;;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,4 +1,4 @@
1
1
  export { ConfigModule } from './config-module';
2
2
  export { ConfigService } from './service';
3
- export { CONFIG_SERVICE_TOKEN, type ConfigModuleOptions, } from './types';
3
+ export { CONFIG_SERVICE_TOKEN, type ConfigModuleOptions, type ConfigFileFormat, } from './types';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,SAAS,CAAC"}
@@ -1,8 +1,21 @@
1
+ import type { ConfigFileFormat } from './types';
1
2
  /**
2
3
  * 配置服务
3
4
  * 提供类型安全的配置访问能力
4
5
  */
5
6
  export declare class ConfigService<TConfig extends Record<string, unknown> = Record<string, unknown>> {
7
+ /**
8
+ * 解析配置内容,按 JSON -> JSONC -> JSON5 顺序自动尝试
9
+ * 利用 Bun 1.3.6+ 的 Bun.JSONC 和 Bun 1.3.7+ 的 Bun.JSON5
10
+ * @param content - 配置文本内容
11
+ * @param format - 强制指定格式(可选),省略则自动检测
12
+ */
13
+ static parseConfigContent(content: string, format?: ConfigFileFormat): unknown;
14
+ /**
15
+ * 从文件加载配置,根据扩展名自动选择解析器
16
+ * @param filePath - 配置文件路径(.json / .jsonc / .json5)
17
+ */
18
+ static loadConfigFile(filePath: string): Promise<Record<string, unknown>>;
6
19
  private config;
7
20
  private readonly namespace?;
8
21
  private configUpdateListeners;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/config/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1F,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,qBAAqB,CAAwC;gBAElD,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM;IAKtD;;;OAGG;IACI,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAY7C;;;OAGG;IACI,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAezD;;;;OAIG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAUtE;;OAEG;IACI,MAAM,IAAI,OAAO;IAIxB;;;;OAIG;IACI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IASrE;;;OAGG;IACI,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAQ/C;;;OAGG;IACI,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;IAI/D,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;CAuBvB"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/config/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;GAGG;AACH,qBAAa,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1F;;;;;OAKG;WACW,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO;IAsBrF;;;OAGG;WACiB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAgBtF,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,qBAAqB,CAAwC;gBAElD,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM;IAKtD;;;OAGG;IACI,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAY7C;;;OAGG;IACI,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAezD;;;;OAIG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAUtE;;OAEG;IACI,MAAM,IAAI,OAAO;IAIxB;;;;OAIG;IACI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IASrE;;;OAGG;IACI,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAQ/C;;;OAGG;IACI,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;IAI/D,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;CAuBvB"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * 配置文件解析格式
3
+ */
4
+ export type ConfigFileFormat = 'json' | 'jsonc' | 'json5';
1
5
  export interface ConfigModuleOptions<TConfig extends Record<string, unknown> = Record<string, unknown>> {
2
6
  /**
3
7
  * 默认配置对象(最低优先级)
@@ -8,6 +12,12 @@ export interface ConfigModuleOptions<TConfig extends Record<string, unknown> = R
8
12
  * @param env - process.env 快照
9
13
  */
10
14
  load?: (env: Record<string, string | undefined>) => Partial<TConfig>;
15
+ /**
16
+ * 配置文件路径列表(支持 .json / .jsonc / .json5 格式)
17
+ * 优先级:configFiles > defaultConfig,按数组顺序后者覆盖前者
18
+ * 仅在 forRootAsync 中生效(文件读取为异步操作)
19
+ */
20
+ configFiles?: string[];
11
21
  /**
12
22
  * 配置验证函数(可抛出错误)
13
23
  * 可用于集成 class-validator 风格的校验逻辑
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpG;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;WAEG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;;;WAIG;QACH,OAAO,CAAC,EAAE,GAAG,CACX,MAAM,EACN;YACE,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CACF,CAAC;QAEF;;;;WAIG;QACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,eAA8C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpG;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;WAEG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;;;WAIG;QACH,OAAO,CAAC,EAAE,GAAG,CACX,MAAM,EACN;YACE,MAAM,EAAE,MAAM,CAAC;YACf,SAAS,EAAE,MAAM,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CACF,CAAC;QAEF;;;;WAIG;QACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,eAA8C,CAAC"}
@@ -25,6 +25,13 @@ export interface ApplicationOptions {
25
25
  * 默认 true
26
26
  */
27
27
  enableSignalHandlers?: boolean;
28
+ /**
29
+ * 是否启用 SO_REUSEPORT
30
+ * 允许多进程绑定同一端口,用于多进程负载均衡
31
+ * 仅 Linux 有效,macOS/Windows 会忽略
32
+ * @default false
33
+ */
34
+ reusePort?: boolean;
28
35
  }
29
36
  /**
30
37
  * 应用主类
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/core/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,UAAU,CAAC;AAMzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAS3C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,uBAAuB,CAAkB;gBAE9B,OAAO,GAAE,kBAAuB;IAsBnD;;;OAGG;IACI,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIxC;;OAEG;IACU,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCpE;;OAEG;YACW,oBAAoB;IAqBlC;;;OAGG;YACW,sBAAsB;IAyBpC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYlC;;;;;OAKG;IACU,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9D;;OAEG;YACW,eAAe;IAkB7B;;;;OAIG;YACW,aAAa;IAyC3B;;;OAGG;IACI,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAKtE;;;OAGG;IACI,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAqBrD;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAc1C;;;OAGG;IACI,wBAAwB,CAAC,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAIzE;;;OAGG;IACI,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAK/D;;;OAGG;IACI,SAAS,IAAI,SAAS,GAAG,SAAS;IAIzC;;;OAGG;YACW,gBAAgB;IAsB9B;;;OAGG;YACW,kBAAkB;IAwBhC;;;OAGG;IACI,YAAY;IAInB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAS7B"}
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/core/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,UAAU,CAAC;AAMzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAU3C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,uBAAuB,CAAkB;gBAE9B,OAAO,GAAE,kBAAuB;IAsBnD;;;OAGG;IACI,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIxC;;OAEG;IACU,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDpE;;OAEG;YACW,oBAAoB;IAqBlC;;;OAGG;YACW,sBAAsB;IAyBpC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBlC;;;;;OAKG;IACU,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9D;;OAEG;YACW,eAAe;IAkB7B;;;;OAIG;YACW,aAAa;IAyC3B;;;OAGG;IACI,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAKtE;;;OAGG;IACI,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAqBrD;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAc1C;;;OAGG;IACI,wBAAwB,CAAC,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAIzE;;;OAGG;IACI,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAK/D;;;OAGG;IACI,SAAS,IAAI,SAAS,GAAG,SAAS;IAIzC;;;OAGG;YACW,gBAAgB;IAsB9B;;;OAGG;YACW,kBAAkB;IAwBhC;;;OAGG;IACI,YAAY;IAInB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAS7B"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 装饰器组合工具
3
+ * 将多个装饰器合并为一个可复用的装饰器
4
+ */
5
+ export declare function applyDecorators(...decorators: Array<ClassDecorator | MethodDecorator | PropertyDecorator>): ClassDecorator & MethodDecorator & PropertyDecorator;
6
+ //# sourceMappingURL=apply-decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-decorators.d.ts","sourceRoot":"","sources":["../../src/core/apply-decorators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,UAAU,EAAE,KAAK,CAAC,cAAc,GAAG,eAAe,GAAG,iBAAiB,CAAC,GACzE,cAAc,GAAG,eAAe,GAAG,iBAAiB,CAwBtD"}
@@ -0,0 +1,47 @@
1
+ export interface ClusterOptions {
2
+ /**
3
+ * 是否启用集群模式
4
+ * @default false
5
+ */
6
+ enabled?: boolean;
7
+ /**
8
+ * Worker 数量。'auto' 表示使用 CPU 核心数
9
+ * @default 'auto'
10
+ */
11
+ workers?: number | 'auto';
12
+ }
13
+ /**
14
+ * 集群管理器
15
+ * 自动派生 worker 进程,每个 worker 使用 reusePort 绑定相同端口
16
+ */
17
+ export declare class ClusterManager {
18
+ private readonly workerCount;
19
+ private readonly workers;
20
+ private readonly scriptPath;
21
+ private readonly port;
22
+ private readonly hostname?;
23
+ constructor(options: {
24
+ workers: number | 'auto';
25
+ scriptPath: string;
26
+ port: number;
27
+ hostname?: string;
28
+ });
29
+ /**
30
+ * 启动所有 worker 进程
31
+ */
32
+ start(): void;
33
+ /**
34
+ * 停止所有 worker 进程
35
+ */
36
+ stop(): Promise<void>;
37
+ private monitorWorkers;
38
+ /**
39
+ * 检查当前进程是否为 cluster worker
40
+ */
41
+ static isWorker(): boolean;
42
+ /**
43
+ * 获取当前 worker ID(仅在 worker 进程中有效)
44
+ */
45
+ static getWorkerId(): number;
46
+ }
47
+ //# sourceMappingURL=cluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/core/cluster.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;gBAEhB,OAAO,EAAE;QAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAQD;;OAEG;IACI,KAAK,IAAI,IAAI;IA+BpB;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBlC,OAAO,CAAC,cAAc;IA8BtB;;OAEG;WACW,QAAQ,IAAI,OAAO;IAIjC;;OAEG;WACW,WAAW,IAAI,MAAM;CAGpC"}
@@ -1,5 +1,6 @@
1
1
  export { Application, type ApplicationOptions } from './application';
2
2
  export { BunServer, type ServerOptions } from './server';
3
+ export { ClusterManager, type ClusterOptions } from './cluster';
3
4
  export { Context } from './context';
4
5
  export { ContextService, CONTEXT_SERVICE_TOKEN, contextStore } from './context-service';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -27,6 +27,13 @@ export interface ServerOptions {
27
27
  * 默认 30 秒
28
28
  */
29
29
  gracefulShutdownTimeout?: number;
30
+ /**
31
+ * 是否启用 SO_REUSEPORT
32
+ * 允许多进程绑定同一端口,用于多进程负载均衡
33
+ * 仅 Linux 有效,macOS/Windows 会忽略
34
+ * @default false
35
+ */
36
+ reusePort?: boolean;
30
37
  }
31
38
  /**
32
39
  * 服务器封装类
@@ -75,6 +82,7 @@ export declare class BunServer {
75
82
  isRunning(): boolean;
76
83
  /**
77
84
  * 获取服务器端口
85
+ * 如果服务器正在运行,返回实际绑定的端口(支持 port:0 场景)
78
86
  */
79
87
  getPort(): number;
80
88
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1D;;OAEG;IACH,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAa;gBAElB,OAAO,EAAE,aAAa;IAIzC;;OAEG;IACI,KAAK,IAAI,IAAI;IAoGpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAWnB;;;;;OAKG;IACU,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C9D;;OAEG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;OAEG;IACI,mBAAmB,IAAI,OAAO;IAIrC;;;OAGG;IACI,SAAS,IAAI,MAAM,CAAC,uBAAuB,CAAC,GAAG,SAAS;IAI/D;;;OAGG;IACI,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACI,OAAO,IAAI,MAAM;IAIxB;;OAEG;IACI,WAAW,IAAI,MAAM,GAAG,SAAS;CAGzC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE1D;;OAEG;IACH,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAE7C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAa;gBAElB,OAAO,EAAE,aAAa;IAIzC;;OAEG;IACI,KAAK,IAAI,IAAI;IAqGpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAWnB;;;;;OAKG;IACU,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C9D;;OAEG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;OAEG;IACI,mBAAmB,IAAI,OAAO;IAIrC;;;OAGG;IACI,SAAS,IAAI,MAAM,CAAC,uBAAuB,CAAC,GAAG,SAAS;IAI/D;;;OAGG;IACI,SAAS,IAAI,OAAO;IAI3B;;;OAGG;IACI,OAAO,IAAI,MAAM;IAOxB;;OAEG;IACI,WAAW,IAAI,MAAM,GAAG,SAAS;CAGzC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Dashboard 服务
3
+ * 提供监控 UI 和 API 端点
4
+ */
5
+ export declare class DashboardService {
6
+ private readonly basePath;
7
+ private readonly auth?;
8
+ private readonly startTime;
9
+ /**
10
+ * 创建 Dashboard 服务实例
11
+ * @param basePath - Dashboard 基础路径
12
+ * @param auth - Basic Auth 认证配置(可选)
13
+ */
14
+ constructor(basePath: string, auth?: {
15
+ username: string;
16
+ password: string;
17
+ });
18
+ /**
19
+ * 注册 Dashboard 路由
20
+ */
21
+ registerRoutes(): void;
22
+ /**
23
+ * 检查 Basic Auth
24
+ * @param ctx - 请求上下文
25
+ * @returns 是否通过认证,未配置 auth 时返回 true
26
+ */
27
+ private checkAuth;
28
+ /**
29
+ * 返回 401 Unauthorized 响应
30
+ */
31
+ private unauthorizedResponse;
32
+ /**
33
+ * 处理 Dashboard 主页面
34
+ */
35
+ private handleDashboard;
36
+ /**
37
+ * 处理系统信息 API
38
+ */
39
+ private handleSystem;
40
+ /**
41
+ * 处理路由列表 API
42
+ */
43
+ private handleRoutes;
44
+ /**
45
+ * 将 Markdown 文本渲染为 HTML
46
+ * 利用 Bun 1.3.8+ 内置 Bun.markdown 解析器(Zig 实现,支持 GFM)
47
+ */
48
+ private handleMarkdownRender;
49
+ /**
50
+ * 处理健康检查 API
51
+ * 如果 HealthModule 已注册则运行健康指示器,否则返回基本状态
52
+ */
53
+ private handleHealth;
54
+ }
55
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/dashboard/controller.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAyC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAEhD;;;;OAIG;gBAED,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAM/C;;OAEG;IACI,cAAc,IAAI,IAAI;IA0B7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAmBjB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;YACW,eAAe;IAU7B;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,YAAY;IAkB1B;;;OAGG;YACW,oBAAoB;IAwBlC;;;OAGG;YACW,YAAY;CA0C3B"}
@@ -0,0 +1,20 @@
1
+ import type { ApplicationExtension } from '../extensions/types';
2
+ import type { Container } from '../di/container';
3
+ import { DashboardService } from './controller';
4
+ /**
5
+ * Dashboard 扩展
6
+ * 在应用初始化时注册 Dashboard 路由
7
+ */
8
+ export declare class DashboardExtension implements ApplicationExtension {
9
+ private readonly service;
10
+ /**
11
+ * 创建 Dashboard 扩展
12
+ * @param service - Dashboard 服务实例
13
+ */
14
+ constructor(service: DashboardService);
15
+ /**
16
+ * 注册扩展,将 Dashboard 路由注册到 RouteRegistry
17
+ */
18
+ register(_container: Container): void;
19
+ }
20
+ //# sourceMappingURL=dashboard-extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-extension.d.ts","sourceRoot":"","sources":["../../src/dashboard/dashboard-extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C;;;OAGG;gBACgB,OAAO,EAAE,gBAAgB;IAI5C;;OAEG;IACI,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI;CAG7C"}
@@ -0,0 +1,13 @@
1
+ import type { DashboardModuleOptions } from './types';
2
+ /**
3
+ * Dashboard 模块
4
+ * 提供监控 Web UI,可视化指标、健康状态、路由和系统信息
5
+ */
6
+ export declare class DashboardModule {
7
+ /**
8
+ * 创建 Dashboard 模块
9
+ * @param options - 模块配置
10
+ */
11
+ static forRoot(options?: DashboardModuleOptions): typeof DashboardModule;
12
+ }
13
+ //# sourceMappingURL=dashboard-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-module.d.ts","sourceRoot":"","sources":["../../src/dashboard/dashboard-module.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD;;;GAGG;AACH,qBAKa,eAAe;IAC1B;;;OAGG;WACW,OAAO,CACnB,OAAO,GAAE,sBAA2B,GACnC,OAAO,eAAe;CAgB1B"}
@@ -0,0 +1,4 @@
1
+ export { DashboardModule } from './dashboard-module';
2
+ export { DashboardService } from './controller';
3
+ export { DASHBOARD_OPTIONS_TOKEN, type DashboardModuleOptions } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,KAAK,sBAAsB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface DashboardModuleOptions {
2
+ /**
3
+ * Dashboard UI 路径
4
+ * @default '/_dashboard'
5
+ */
6
+ path?: string;
7
+ /**
8
+ * Basic Auth 认证配置
9
+ */
10
+ auth?: {
11
+ username: string;
12
+ password: string;
13
+ };
14
+ }
15
+ export declare const DASHBOARD_OPTIONS_TOKEN: unique symbol;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,eAAO,MAAM,uBAAuB,eAAiD,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 创建 Dashboard HTML 页面
3
+ * @param basePath - Dashboard 基础路径
4
+ * @returns 完整的 HTML 页面字符串
5
+ */
6
+ export declare function createDashboardHTML(basePath: string): string;
7
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/dashboard/ui.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqN5D"}