@dangao/bun-server 1.3.0 → 1.4.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 (152) hide show
  1. package/README.md +15 -0
  2. package/dist/config/config-module.d.ts +17 -0
  3. package/dist/config/config-module.d.ts.map +1 -1
  4. package/dist/config/service.d.ts +18 -1
  5. package/dist/config/service.d.ts.map +1 -1
  6. package/dist/config/types.d.ts +25 -0
  7. package/dist/config/types.d.ts.map +1 -1
  8. package/dist/controller/controller.d.ts +5 -0
  9. package/dist/controller/controller.d.ts.map +1 -1
  10. package/dist/core/application.d.ts +15 -0
  11. package/dist/core/application.d.ts.map +1 -1
  12. package/dist/core/context.d.ts +1 -0
  13. package/dist/core/context.d.ts.map +1 -1
  14. package/dist/core/server.d.ts +8 -0
  15. package/dist/core/server.d.ts.map +1 -1
  16. package/dist/index.d.ts +6 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6418 -4177
  19. package/dist/microservice/config-center/config-center-module.d.ts +43 -0
  20. package/dist/microservice/config-center/config-center-module.d.ts.map +1 -0
  21. package/dist/microservice/config-center/decorators.d.ts +58 -0
  22. package/dist/microservice/config-center/decorators.d.ts.map +1 -0
  23. package/dist/microservice/config-center/index.d.ts +9 -0
  24. package/dist/microservice/config-center/index.d.ts.map +1 -0
  25. package/dist/microservice/config-center/nacos-config-center.d.ts +37 -0
  26. package/dist/microservice/config-center/nacos-config-center.d.ts.map +1 -0
  27. package/dist/microservice/config-center/nacos-decorators.d.ts +24 -0
  28. package/dist/microservice/config-center/nacos-decorators.d.ts.map +1 -0
  29. package/dist/microservice/config-center/types.d.ts +63 -0
  30. package/dist/microservice/config-center/types.d.ts.map +1 -0
  31. package/dist/microservice/governance/circuit-breaker.d.ts +54 -0
  32. package/dist/microservice/governance/circuit-breaker.d.ts.map +1 -0
  33. package/dist/microservice/governance/decorators.d.ts +51 -0
  34. package/dist/microservice/governance/decorators.d.ts.map +1 -0
  35. package/dist/microservice/governance/index.d.ts +9 -0
  36. package/dist/microservice/governance/index.d.ts.map +1 -0
  37. package/dist/microservice/governance/rate-limiter.d.ts +26 -0
  38. package/dist/microservice/governance/rate-limiter.d.ts.map +1 -0
  39. package/dist/microservice/governance/redis-rate-limiter.d.ts +76 -0
  40. package/dist/microservice/governance/redis-rate-limiter.d.ts.map +1 -0
  41. package/dist/microservice/governance/retry-strategy.d.ts +21 -0
  42. package/dist/microservice/governance/retry-strategy.d.ts.map +1 -0
  43. package/dist/microservice/governance/types.d.ts +212 -0
  44. package/dist/microservice/governance/types.d.ts.map +1 -0
  45. package/dist/microservice/index.d.ts +10 -0
  46. package/dist/microservice/index.d.ts.map +1 -0
  47. package/dist/microservice/monitoring/index.d.ts +4 -0
  48. package/dist/microservice/monitoring/index.d.ts.map +1 -0
  49. package/dist/microservice/monitoring/metrics-collector.d.ts +54 -0
  50. package/dist/microservice/monitoring/metrics-collector.d.ts.map +1 -0
  51. package/dist/microservice/monitoring/metrics-integration.d.ts +24 -0
  52. package/dist/microservice/monitoring/metrics-integration.d.ts.map +1 -0
  53. package/dist/microservice/monitoring/types.d.ts +99 -0
  54. package/dist/microservice/monitoring/types.d.ts.map +1 -0
  55. package/dist/microservice/service-client/call-decorators.d.ts +52 -0
  56. package/dist/microservice/service-client/call-decorators.d.ts.map +1 -0
  57. package/dist/microservice/service-client/decorators.d.ts +35 -0
  58. package/dist/microservice/service-client/decorators.d.ts.map +1 -0
  59. package/dist/microservice/service-client/index.d.ts +7 -0
  60. package/dist/microservice/service-client/index.d.ts.map +1 -0
  61. package/dist/microservice/service-client/interceptors.d.ts +96 -0
  62. package/dist/microservice/service-client/interceptors.d.ts.map +1 -0
  63. package/dist/microservice/service-client/load-balancer.d.ts +59 -0
  64. package/dist/microservice/service-client/load-balancer.d.ts.map +1 -0
  65. package/dist/microservice/service-client/service-client.d.ts +74 -0
  66. package/dist/microservice/service-client/service-client.d.ts.map +1 -0
  67. package/dist/microservice/service-client/types.d.ts +155 -0
  68. package/dist/microservice/service-client/types.d.ts.map +1 -0
  69. package/dist/microservice/service-registry/decorators.d.ts +84 -0
  70. package/dist/microservice/service-registry/decorators.d.ts.map +1 -0
  71. package/dist/microservice/service-registry/discovery-decorators.d.ts +58 -0
  72. package/dist/microservice/service-registry/discovery-decorators.d.ts.map +1 -0
  73. package/dist/microservice/service-registry/health-integration.d.ts +32 -0
  74. package/dist/microservice/service-registry/health-integration.d.ts.map +1 -0
  75. package/dist/microservice/service-registry/index.d.ts +10 -0
  76. package/dist/microservice/service-registry/index.d.ts.map +1 -0
  77. package/dist/microservice/service-registry/nacos-service-registry.d.ts +68 -0
  78. package/dist/microservice/service-registry/nacos-service-registry.d.ts.map +1 -0
  79. package/dist/microservice/service-registry/service-registry-module.d.ts +48 -0
  80. package/dist/microservice/service-registry/service-registry-module.d.ts.map +1 -0
  81. package/dist/microservice/service-registry/types.d.ts +121 -0
  82. package/dist/microservice/service-registry/types.d.ts.map +1 -0
  83. package/dist/microservice/tracing/collectors.d.ts +27 -0
  84. package/dist/microservice/tracing/collectors.d.ts.map +1 -0
  85. package/dist/microservice/tracing/index.d.ts +4 -0
  86. package/dist/microservice/tracing/index.d.ts.map +1 -0
  87. package/dist/microservice/tracing/tracer.d.ts +59 -0
  88. package/dist/microservice/tracing/tracer.d.ts.map +1 -0
  89. package/dist/microservice/tracing/types.d.ts +179 -0
  90. package/dist/microservice/tracing/types.d.ts.map +1 -0
  91. package/dist/request/request.d.ts +1 -0
  92. package/dist/request/request.d.ts.map +1 -1
  93. package/docs/microservice-config-center.md +258 -0
  94. package/docs/microservice-nacos.md +346 -0
  95. package/docs/microservice-service-registry.md +306 -0
  96. package/docs/microservice.md +680 -0
  97. package/docs/troubleshooting.md +41 -0
  98. package/docs/zh/troubleshooting.md +41 -0
  99. package/package.json +5 -4
  100. package/src/config/config-module.ts +210 -0
  101. package/src/config/service.ts +52 -1
  102. package/src/config/types.ts +31 -0
  103. package/src/controller/controller.ts +8 -0
  104. package/src/core/application.ts +100 -2
  105. package/src/core/context.ts +1 -0
  106. package/src/core/server.ts +14 -0
  107. package/src/index.ts +81 -0
  108. package/src/microservice/config-center/config-center-module.ts +98 -0
  109. package/src/microservice/config-center/decorators.ts +159 -0
  110. package/src/microservice/config-center/index.ts +13 -0
  111. package/src/microservice/config-center/nacos-config-center.ts +126 -0
  112. package/src/microservice/config-center/nacos-decorators.ts +34 -0
  113. package/src/microservice/config-center/types.ts +80 -0
  114. package/src/microservice/governance/circuit-breaker.ts +229 -0
  115. package/src/microservice/governance/decorators.ts +113 -0
  116. package/src/microservice/governance/index.ts +18 -0
  117. package/src/microservice/governance/rate-limiter.ts +72 -0
  118. package/src/microservice/governance/redis-rate-limiter.ts +154 -0
  119. package/src/microservice/governance/retry-strategy.ts +74 -0
  120. package/src/microservice/governance/types.ts +247 -0
  121. package/src/microservice/index.ts +12 -0
  122. package/src/microservice/monitoring/index.ts +8 -0
  123. package/src/microservice/monitoring/metrics-collector.ts +223 -0
  124. package/src/microservice/monitoring/metrics-integration.ts +154 -0
  125. package/src/microservice/monitoring/types.ts +118 -0
  126. package/src/microservice/service-client/call-decorators.ts +107 -0
  127. package/src/microservice/service-client/decorators.ts +87 -0
  128. package/src/microservice/service-client/index.ts +37 -0
  129. package/src/microservice/service-client/interceptors.ts +182 -0
  130. package/src/microservice/service-client/load-balancer.ts +205 -0
  131. package/src/microservice/service-client/service-client.ts +488 -0
  132. package/src/microservice/service-client/types.ts +186 -0
  133. package/src/microservice/service-registry/decorators.ts +238 -0
  134. package/src/microservice/service-registry/discovery-decorators.ts +156 -0
  135. package/src/microservice/service-registry/health-integration.ts +146 -0
  136. package/src/microservice/service-registry/index.ts +20 -0
  137. package/src/microservice/service-registry/nacos-service-registry.ts +259 -0
  138. package/src/microservice/service-registry/service-registry-module.ts +105 -0
  139. package/src/microservice/service-registry/types.ts +149 -0
  140. package/src/microservice/tracing/collectors.ts +50 -0
  141. package/src/microservice/tracing/index.ts +15 -0
  142. package/src/microservice/tracing/tracer.ts +293 -0
  143. package/src/microservice/tracing/types.ts +213 -0
  144. package/src/request/request.ts +1 -0
  145. package/tests/config/set-value-by-path.test.ts +53 -0
  146. package/tests/microservice/config-center.test.ts +77 -0
  147. package/tests/microservice/governance.test.ts +157 -0
  148. package/tests/microservice/monitoring.test.ts +75 -0
  149. package/tests/microservice/service-client.test.ts +136 -0
  150. package/tests/microservice/service-registry.test.ts +80 -0
  151. package/tests/microservice/tracing.test.ts +143 -0
  152. package/tests/utils/test-port.ts +29 -19
@@ -0,0 +1,121 @@
1
+ /**
2
+ * 服务注册中心抽象接口
3
+ * 定义服务注册与发现的核心能力,不依赖具体实现
4
+ */
5
+ export interface ServiceRegistry {
6
+ /**
7
+ * 注册服务实例
8
+ * @param instance - 服务实例信息
9
+ */
10
+ register(instance: ServiceInstance): Promise<void>;
11
+ /**
12
+ * 注销服务实例
13
+ * @param instance - 服务实例信息
14
+ */
15
+ deregister(instance: ServiceInstance): Promise<void>;
16
+ /**
17
+ * 续约服务实例(心跳)
18
+ * @param instance - 服务实例信息
19
+ */
20
+ renew(instance: ServiceInstance): Promise<void>;
21
+ /**
22
+ * 查询服务实例列表
23
+ * @param serviceName - 服务名
24
+ * @param options - 查询选项
25
+ * @returns 服务实例列表
26
+ */
27
+ getInstances(serviceName: string, options?: GetInstancesOptions): Promise<ServiceInstance[]>;
28
+ /**
29
+ * 监听服务实例变更
30
+ * @param serviceName - 服务名
31
+ * @param listener - 变更监听器
32
+ * @param options - 查询选项(可选)
33
+ * @returns 取消监听的函数
34
+ */
35
+ watchInstances(serviceName: string, listener: InstancesChangeListener, options?: GetInstancesOptions): () => void;
36
+ /**
37
+ * 关闭注册中心连接
38
+ */
39
+ close(): Promise<void>;
40
+ }
41
+ /**
42
+ * 服务实例信息
43
+ */
44
+ export interface ServiceInstance {
45
+ /**
46
+ * 服务名
47
+ */
48
+ serviceName: string;
49
+ /**
50
+ * 实例 IP
51
+ */
52
+ ip: string;
53
+ /**
54
+ * 实例端口
55
+ */
56
+ port: number;
57
+ /**
58
+ * 权重(可选)
59
+ */
60
+ weight?: number;
61
+ /**
62
+ * 是否健康(可选)
63
+ */
64
+ healthy?: boolean;
65
+ /**
66
+ * 是否启用(可选)
67
+ */
68
+ enabled?: boolean;
69
+ /**
70
+ * 元数据(可选)
71
+ */
72
+ metadata?: Record<string, string>;
73
+ /**
74
+ * 集群名称(可选)
75
+ */
76
+ clusterName?: string;
77
+ /**
78
+ * 命名空间 ID(可选)
79
+ */
80
+ namespaceId?: string;
81
+ /**
82
+ * 分组名称(可选)
83
+ */
84
+ groupName?: string;
85
+ }
86
+ /**
87
+ * 服务实例查询选项
88
+ */
89
+ export interface GetInstancesOptions {
90
+ /**
91
+ * 命名空间 ID(可选)
92
+ */
93
+ namespaceId?: string;
94
+ /**
95
+ * 分组名称(可选)
96
+ */
97
+ groupName?: string;
98
+ /**
99
+ * 集群名称(可选)
100
+ */
101
+ clusterName?: string;
102
+ /**
103
+ * 是否只返回健康实例(可选)
104
+ */
105
+ healthyOnly?: boolean;
106
+ }
107
+ /**
108
+ * 服务实例变更监听器
109
+ */
110
+ export interface InstancesChangeListener {
111
+ /**
112
+ * 服务实例变更回调
113
+ * @param instances - 新的服务实例列表
114
+ */
115
+ (instances: ServiceInstance[]): void;
116
+ }
117
+ /**
118
+ * ServiceRegistry Token(用于依赖注入)
119
+ */
120
+ export declare const SERVICE_REGISTRY_TOKEN: unique symbol;
121
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/microservice/service-registry/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;OAKG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAE9B;;;;;;OAMG;IACH,cAAc,CACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,IAAI,CAAC;IAEd;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,eAAmC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Span, TraceCollector } from './types';
2
+ /**
3
+ * 控制台追踪收集器(用于调试)
4
+ */
5
+ export declare class ConsoleTraceCollector implements TraceCollector {
6
+ collect(span: Span): void;
7
+ }
8
+ /**
9
+ * 内存追踪收集器(用于测试和开发)
10
+ */
11
+ export declare class MemoryTraceCollector implements TraceCollector {
12
+ private readonly spans;
13
+ collect(span: Span): void;
14
+ /**
15
+ * 获取所有收集的 Span
16
+ */
17
+ getSpans(): Span[];
18
+ /**
19
+ * 清空收集的 Span
20
+ */
21
+ clear(): void;
22
+ /**
23
+ * 获取指定 Trace ID 的所有 Span
24
+ */
25
+ getSpansByTraceId(traceId: string): Span[];
26
+ }
27
+ //# sourceMappingURL=collectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors.d.ts","sourceRoot":"","sources":["../../../src/microservice/tracing/collectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IACnD,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CAUjC;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IAE7B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIhC;;OAEG;IACI,QAAQ,IAAI,IAAI,EAAE;IAIzB;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACI,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE;CAGlD"}
@@ -0,0 +1,4 @@
1
+ export { Tracer } from './tracer';
2
+ export { ConsoleTraceCollector, MemoryTraceCollector } from './collectors';
3
+ export { SpanStatus, SpanKind, type TraceId, type SpanId, type SpanContext, type Span, type SpanTags, type SpanEvent, type TracingOptions, type TraceCollector, } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/microservice/tracing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,UAAU,EACV,QAAQ,EACR,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { SpanKind, SpanStatus, type SpanId, type SpanContext, type Span, type SpanTags, type SpanEvent, type TracingOptions, type TraceCollector } from './types';
2
+ /**
3
+ * 分布式追踪器
4
+ */
5
+ export declare class Tracer {
6
+ private readonly options;
7
+ private readonly collectors;
8
+ private readonly activeSpans;
9
+ constructor(options?: TracingOptions);
10
+ /**
11
+ * 添加追踪数据收集器
12
+ */
13
+ addCollector(collector: TraceCollector): void;
14
+ /**
15
+ * 开始新的 Span
16
+ */
17
+ startSpan(name: string, kind?: SpanKind, parentContext?: SpanContext): Span;
18
+ /**
19
+ * 结束 Span
20
+ */
21
+ endSpan(spanId: SpanId, status?: SpanStatus, error?: Error): void;
22
+ /**
23
+ * 设置 Span 标签
24
+ */
25
+ setSpanTag(spanId: SpanId, key: string, value: string | number | boolean): void;
26
+ /**
27
+ * 设置 Span 标签(批量)
28
+ */
29
+ setSpanTags(spanId: SpanId, tags: SpanTags): void;
30
+ /**
31
+ * 添加 Span 事件
32
+ */
33
+ addSpanEvent(spanId: SpanId, event: Omit<SpanEvent, 'timestamp'>): void;
34
+ /**
35
+ * 获取当前 Span 上下文(用于传播)
36
+ */
37
+ getCurrentSpanContext(spanId: SpanId): SpanContext | undefined;
38
+ /**
39
+ * 从 HTTP 头中提取 Span 上下文
40
+ */
41
+ extractFromHeaders(headers: Record<string, string>): SpanContext | undefined;
42
+ /**
43
+ * 将 Span 上下文注入到 HTTP 头中
44
+ */
45
+ injectToHeaders(context: SpanContext): Record<string, string>;
46
+ /**
47
+ * 创建空的 Span(未启用追踪时使用)
48
+ */
49
+ private createEmptySpan;
50
+ /**
51
+ * 刷新所有收集器
52
+ */
53
+ flush(): Promise<void>;
54
+ /**
55
+ * 关闭追踪器
56
+ */
57
+ close(): Promise<void>;
58
+ }
59
+ //# sourceMappingURL=tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../../src/microservice/tracing/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,UAAU,EAEV,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AA4BjB;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGtB;IACF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;gBAEzC,OAAO,GAAE,cAAmB;IAS/C;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,QAA4B,EAClC,aAAa,CAAC,EAAE,WAAW,GAC1B,IAAI;IAyCP;;OAEG;IACI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,UAA0B,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IA4BvF;;OAEG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IAUtF;;OAEG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAUxD;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,IAAI;IAa9E;;OAEG;IACI,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAKrE;;OAEG;IACI,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,GAAG,SAAS;IAkBnF;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAiBpE;;OAEG;IACH,OAAO,CAAC,eAAe;IAmBvB;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAepC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Trace ID 类型
3
+ */
4
+ export type TraceId = string;
5
+ /**
6
+ * Span ID 类型
7
+ */
8
+ export type SpanId = string;
9
+ /**
10
+ * Span 状态
11
+ */
12
+ export declare enum SpanStatus {
13
+ /**
14
+ * 未设置
15
+ */
16
+ UNSET = "UNSET",
17
+ /**
18
+ * 成功
19
+ */
20
+ OK = "OK",
21
+ /**
22
+ * 错误
23
+ */
24
+ ERROR = "ERROR"
25
+ }
26
+ /**
27
+ * Span 类型
28
+ */
29
+ export declare enum SpanKind {
30
+ /**
31
+ * 客户端(发起请求)
32
+ */
33
+ CLIENT = "CLIENT",
34
+ /**
35
+ * 服务端(处理请求)
36
+ */
37
+ SERVER = "SERVER",
38
+ /**
39
+ * 内部(内部操作)
40
+ */
41
+ INTERNAL = "INTERNAL"
42
+ }
43
+ /**
44
+ * Span 上下文
45
+ */
46
+ export interface SpanContext {
47
+ /**
48
+ * Trace ID
49
+ */
50
+ traceId: TraceId;
51
+ /**
52
+ * Span ID
53
+ */
54
+ spanId: SpanId;
55
+ /**
56
+ * 父 Span ID(可选)
57
+ */
58
+ parentSpanId?: SpanId;
59
+ /**
60
+ * 是否采样
61
+ */
62
+ sampled?: boolean;
63
+ /**
64
+ * 标志位(用于传播)
65
+ */
66
+ flags?: number;
67
+ }
68
+ /**
69
+ * Span 标签
70
+ */
71
+ export type SpanTags = Record<string, string | number | boolean>;
72
+ /**
73
+ * Span 事件
74
+ */
75
+ export interface SpanEvent {
76
+ /**
77
+ * 事件名称
78
+ */
79
+ name: string;
80
+ /**
81
+ * 时间戳(毫秒)
82
+ */
83
+ timestamp: number;
84
+ /**
85
+ * 事件属性
86
+ */
87
+ attributes?: Record<string, string | number | boolean>;
88
+ }
89
+ /**
90
+ * Span 数据
91
+ */
92
+ export interface Span {
93
+ /**
94
+ * Span 上下文
95
+ */
96
+ context: SpanContext;
97
+ /**
98
+ * Span 名称
99
+ */
100
+ name: string;
101
+ /**
102
+ * Span 类型
103
+ */
104
+ kind: SpanKind;
105
+ /**
106
+ * 开始时间(毫秒)
107
+ */
108
+ startTime: number;
109
+ /**
110
+ * 结束时间(毫秒,可选)
111
+ */
112
+ endTime?: number;
113
+ /**
114
+ * 持续时间(毫秒)
115
+ */
116
+ duration?: number;
117
+ /**
118
+ * 状态
119
+ */
120
+ status: SpanStatus;
121
+ /**
122
+ * 错误信息(可选)
123
+ */
124
+ error?: Error;
125
+ /**
126
+ * 标签
127
+ */
128
+ tags?: SpanTags;
129
+ /**
130
+ * 事件列表
131
+ */
132
+ events?: SpanEvent[];
133
+ /**
134
+ * 子 Span 列表
135
+ */
136
+ children?: Span[];
137
+ }
138
+ /**
139
+ * 追踪配置选项
140
+ */
141
+ export interface TracingOptions {
142
+ /**
143
+ * 采样率(0-1)
144
+ * @default 1.0
145
+ */
146
+ samplingRate?: number;
147
+ /**
148
+ * 是否启用追踪
149
+ * @default true
150
+ */
151
+ enabled?: boolean;
152
+ /**
153
+ * Trace ID 生成器
154
+ */
155
+ traceIdGenerator?: () => TraceId;
156
+ /**
157
+ * Span ID 生成器
158
+ */
159
+ spanIdGenerator?: () => SpanId;
160
+ }
161
+ /**
162
+ * 追踪数据收集器接口
163
+ */
164
+ export interface TraceCollector {
165
+ /**
166
+ * 收集 Span 数据
167
+ * @param span - Span 数据
168
+ */
169
+ collect(span: Span): void | Promise<void>;
170
+ /**
171
+ * 刷新数据(可选)
172
+ */
173
+ flush?(): void | Promise<void>;
174
+ /**
175
+ * 关闭收集器
176
+ */
177
+ close?(): void | Promise<void>;
178
+ }
179
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/microservice/tracing/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B;;GAEG;AACH,oBAAY,UAAU;IACpB;;OAEG;IACH,KAAK,UAAU;IAEf;;OAEG;IACH,EAAE,OAAO;IAET;;OAEG;IACH,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,QAAQ;IAClB;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,OAAO,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IAEf;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;IAEjC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B;;OAEG;IACH,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC"}
@@ -1,3 +1,4 @@
1
+ import { type URLSearchParams, URL } from 'url';
1
2
  /**
2
3
  * 请求封装类
3
4
  * 扩展原生 Request,提供便捷方法
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;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;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,OAAO,CAAC,KAAK,CAAC,CAAU;IAExB;;OAEG;IACH,OAAO,CAAC,WAAW,CAAkB;gBAElB,OAAO,EAAE,OAAO;IASnC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAQrC;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;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,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAG7C"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAEhD;;;GAGG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;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;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,OAAO,CAAC,KAAK,CAAC,CAAU;IAExB;;OAEG;IACH,OAAO,CAAC,WAAW,CAAkB;gBAElB,OAAO,EAAE,OAAO;IASnC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAQrC;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;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,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAG7C"}
@@ -0,0 +1,258 @@
1
+ # 配置中心使用指南
2
+
3
+ 本文档介绍如何使用 Bun Server Framework 的配置中心功能。
4
+
5
+ ## 目录
6
+
7
+ - [概述](#概述)
8
+ - [快速开始](#快速开始)
9
+ - [基本使用](#基本使用)
10
+ - [配置热更新](#配置热更新)
11
+ - [ConfigModule 集成](#configmodule-集成)
12
+ - [装饰器使用](#装饰器使用)
13
+ - [最佳实践](#最佳实践)
14
+
15
+ ## 概述
16
+
17
+ 配置中心提供了集中式配置管理能力,支持:
18
+
19
+ - **动态配置**:从配置中心获取配置,支持配置热更新
20
+ - **多环境支持**:通过命名空间和分组管理不同环境的配置
21
+ - **配置优先级**:配置中心配置 > 环境变量 > 默认配置
22
+ - **配置监听**:监听配置变更,自动刷新应用配置
23
+
24
+ ## 快速开始
25
+
26
+ ### 1. 注册配置中心模块
27
+
28
+ ```typescript
29
+ import { Application } from '@dangao/bun-server';
30
+ import { ConfigCenterModule } from '@dangao/bun-server';
31
+
32
+ const app = new Application();
33
+
34
+ app.registerModule(
35
+ ConfigCenterModule.forRoot({
36
+ provider: 'nacos',
37
+ nacos: {
38
+ client: {
39
+ serverList: ['http://localhost:8848'],
40
+ namespaceId: 'public',
41
+ username: 'nacos',
42
+ password: 'nacos',
43
+ },
44
+ watchInterval: 3000, // 配置轮询间隔(毫秒)
45
+ },
46
+ }),
47
+ );
48
+ ```
49
+
50
+ ### 2. 使用配置中心
51
+
52
+ ```typescript
53
+ import {
54
+ CONFIG_CENTER_TOKEN,
55
+ type ConfigCenter,
56
+ } from '@dangao/bun-server';
57
+ import { Inject, Injectable } from '@dangao/bun-server';
58
+
59
+ @Injectable()
60
+ class MyService {
61
+ public constructor(
62
+ @Inject(CONFIG_CENTER_TOKEN) private readonly configCenter: ConfigCenter,
63
+ ) {}
64
+
65
+ public async getConfig() {
66
+ const result = await this.configCenter.getConfig(
67
+ 'my-config',
68
+ 'DEFAULT_GROUP',
69
+ );
70
+ return JSON.parse(result.content);
71
+ }
72
+ }
73
+ ```
74
+
75
+ ## 基本使用
76
+
77
+ ### 获取配置
78
+
79
+ ```typescript
80
+ // 基本用法
81
+ const config = await configCenter.getConfig('my-config', 'DEFAULT_GROUP');
82
+
83
+ // 指定命名空间
84
+ const config = await configCenter.getConfig(
85
+ 'my-config',
86
+ 'DEFAULT_GROUP',
87
+ 'production',
88
+ );
89
+ ```
90
+
91
+ ### 配置结果
92
+
93
+ `getConfig` 返回 `ConfigResult` 对象:
94
+
95
+ ```typescript
96
+ interface ConfigResult {
97
+ content: string; // 配置内容
98
+ md5: string; // 配置 MD5(用于判断是否变更)
99
+ lastModified: number; // 最后修改时间(时间戳)
100
+ contentType: string; // 内容类型
101
+ }
102
+ ```
103
+
104
+ ### 监听配置变更
105
+
106
+ ```typescript
107
+ const unsubscribe = configCenter.watchConfig(
108
+ 'my-config',
109
+ 'DEFAULT_GROUP',
110
+ (newConfig) => {
111
+ console.log('Config updated:', newConfig.content);
112
+ // 更新应用配置
113
+ updateAppConfig(JSON.parse(newConfig.content));
114
+ },
115
+ );
116
+
117
+ // 取消监听
118
+ unsubscribe();
119
+ ```
120
+
121
+ ## 配置热更新
122
+
123
+ 配置中心支持配置热更新,通过轮询机制检测配置变更:
124
+
125
+ ```typescript
126
+ ConfigCenterModule.forRoot({
127
+ provider: 'nacos',
128
+ nacos: {
129
+ watchInterval: 3000, // 每 3 秒检查一次配置变更
130
+ },
131
+ });
132
+
133
+ // 监听配置变更
134
+ configCenter.watchConfig('my-config', 'DEFAULT_GROUP', (newConfig) => {
135
+ // 配置变更时自动调用
136
+ console.log('Config hot updated:', newConfig.content);
137
+ });
138
+ ```
139
+
140
+ ## ConfigModule 集成
141
+
142
+ ConfigModule 支持与配置中心深度集成,配置变更会自动刷新 ConfigService:
143
+
144
+ ```typescript
145
+ import { ConfigModule } from '@dangao/bun-server';
146
+
147
+ ConfigModule.forRoot({
148
+ defaultConfig: {
149
+ app: {
150
+ name: 'MyApp',
151
+ port: 3000,
152
+ },
153
+ },
154
+ configCenter: {
155
+ enabled: true,
156
+ configs: new Map([
157
+ ['app.name', { dataId: 'app-name', groupName: 'DEFAULT_GROUP' }],
158
+ ['app.port', { dataId: 'app-port', groupName: 'DEFAULT_GROUP' }],
159
+ ]),
160
+ configCenterPriority: true, // 配置中心配置优先级最高
161
+ },
162
+ });
163
+
164
+ // 使用 ConfigService
165
+ import { CONFIG_SERVICE_TOKEN, ConfigService } from '@dangao/bun-server';
166
+
167
+ @Injectable()
168
+ class MyService {
169
+ public constructor(
170
+ @Inject(CONFIG_SERVICE_TOKEN) private readonly config: ConfigService,
171
+ ) {}
172
+
173
+ public getAppName() {
174
+ // 自动从配置中心获取,配置变更时自动更新
175
+ return this.config.get<string>('app.name');
176
+ }
177
+ }
178
+ ```
179
+
180
+ ### 配置优先级
181
+
182
+ - `configCenterPriority: true`(默认):配置中心 > 环境变量 > 默认配置
183
+ - `configCenterPriority: false`:默认配置 > 环境变量 > 配置中心
184
+
185
+ ## 装饰器使用
186
+
187
+ ### @ConfigCenterValue
188
+
189
+ 自动注入配置值:
190
+
191
+ ```typescript
192
+ import { ConfigCenterValue, Injectable } from '@dangao/bun-server';
193
+
194
+ @Injectable()
195
+ class MyService {
196
+ @ConfigCenterValue('app-name', 'DEFAULT_GROUP', {
197
+ defaultValue: 'MyApp',
198
+ watch: true, // 监听配置变更
199
+ })
200
+ public appName: string = '';
201
+
202
+ public getAppName() {
203
+ return this.appName; // 自动从配置中心获取
204
+ }
205
+ }
206
+ ```
207
+
208
+ ### @NacosValue
209
+
210
+ Nacos 特定的配置值注入(便捷别名):
211
+
212
+ ```typescript
213
+ import { NacosValue, Injectable } from '@dangao/bun-server';
214
+
215
+ @Injectable()
216
+ class MyService {
217
+ @NacosValue('app-name', 'DEFAULT_GROUP', {
218
+ defaultValue: 'MyApp',
219
+ })
220
+ public appName: string = '';
221
+ }
222
+ ```
223
+
224
+ ## 最佳实践
225
+
226
+ ### 1. 配置组织
227
+
228
+ - **命名空间**:用于区分不同环境(dev、test、prod)
229
+ - **分组**:用于逻辑分组(DEFAULT_GROUP、DATABASE_GROUP 等)
230
+ - **DataId**:配置的唯一标识
231
+
232
+ ### 2. 配置格式
233
+
234
+ - 推荐使用 JSON 格式存储配置
235
+ - 支持纯文本配置(如 properties、yaml 等)
236
+
237
+ ### 3. 配置监听
238
+
239
+ - 为关键配置启用监听(`watch: true`)
240
+ - 配置变更时及时更新应用状态
241
+ - 避免频繁的配置变更
242
+
243
+ ### 4. 错误处理
244
+
245
+ - 配置获取失败时使用默认值
246
+ - 记录配置获取错误日志
247
+ - 实现配置降级策略
248
+
249
+ ### 5. 性能优化
250
+
251
+ - 合理设置 `watchInterval`(建议 3-10 秒)
252
+ - 使用配置缓存减少 API 调用
253
+ - 批量获取配置(如果支持)
254
+
255
+ ## 示例
256
+
257
+ 完整示例请参考 `examples/microservice-app.ts`。
258
+