@dangao/bun-server 3.2.0 → 3.3.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.
- package/dist/ai/types.d.ts +4 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/auth/types.d.ts +4 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/cache/interceptors.d.ts +3 -3
- package/dist/cache/interceptors.d.ts.map +1 -1
- package/dist/cache/service.d.ts +6 -6
- package/dist/cache/service.d.ts.map +1 -1
- package/dist/cache/types.d.ts +12 -12
- package/dist/cache/types.d.ts.map +1 -1
- package/dist/config/service.d.ts +6 -4
- package/dist/config/service.d.ts.map +1 -1
- package/dist/core/application.d.ts +4 -0
- package/dist/core/application.d.ts.map +1 -1
- package/dist/core/context.d.ts +4 -2
- package/dist/core/context.d.ts.map +1 -1
- package/dist/database/sqlite-adapter.d.ts +4 -2
- package/dist/database/sqlite-adapter.d.ts.map +1 -1
- package/dist/di/container.d.ts +2 -0
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/module-registry.d.ts.map +1 -1
- package/dist/di/module.d.ts +11 -1
- package/dist/di/module.d.ts.map +1 -1
- package/dist/di/types.d.ts +1 -1
- package/dist/di/types.d.ts.map +1 -1
- package/dist/error/handler.d.ts.map +1 -1
- package/dist/error/http-exception.d.ts +8 -8
- package/dist/error/http-exception.d.ts.map +1 -1
- package/dist/error/index.d.ts +1 -0
- package/dist/error/index.d.ts.map +1 -1
- package/dist/events/service.d.ts +2 -2
- package/dist/events/service.d.ts.map +1 -1
- package/dist/events/types.d.ts +12 -3
- package/dist/events/types.d.ts.map +1 -1
- package/dist/index.js +63 -25
- package/dist/index.node.mjs +63 -25
- package/dist/interceptor/base-interceptor.d.ts +3 -3
- package/dist/interceptor/base-interceptor.d.ts.map +1 -1
- package/dist/interceptor/builtin/log-interceptor.d.ts +1 -1
- package/dist/interceptor/builtin/log-interceptor.d.ts.map +1 -1
- package/dist/interceptor/builtin/permission-interceptor.d.ts +1 -1
- package/dist/interceptor/builtin/permission-interceptor.d.ts.map +1 -1
- package/dist/interceptor/interceptor-chain.d.ts +1 -1
- package/dist/interceptor/interceptor-chain.d.ts.map +1 -1
- package/dist/interceptor/interceptor-registry.d.ts +3 -1
- package/dist/interceptor/interceptor-registry.d.ts.map +1 -1
- package/dist/interceptor/types.d.ts +6 -1
- package/dist/interceptor/types.d.ts.map +1 -1
- package/dist/microservice/service-client/types.d.ts +1 -0
- package/dist/microservice/service-client/types.d.ts.map +1 -1
- package/dist/microservice/tracing/tracer.d.ts +1 -0
- package/dist/microservice/tracing/tracer.d.ts.map +1 -1
- package/dist/middleware/builtin/file-upload.d.ts +2 -0
- package/dist/middleware/builtin/file-upload.d.ts.map +1 -1
- package/dist/middleware/builtin/rate-limit.d.ts +9 -1
- package/dist/middleware/builtin/rate-limit.d.ts.map +1 -1
- package/dist/queue/service.d.ts +2 -2
- package/dist/queue/service.d.ts.map +1 -1
- package/dist/queue/types.d.ts +25 -1
- package/dist/queue/types.d.ts.map +1 -1
- package/dist/router/decorators.d.ts +1 -2
- package/dist/router/decorators.d.ts.map +1 -1
- package/dist/security/guards/types.d.ts +1 -0
- package/dist/security/guards/types.d.ts.map +1 -1
- package/dist/security/types.d.ts +1 -1
- package/dist/security/types.d.ts.map +1 -1
- package/dist/session/types.d.ts +8 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/swagger/decorators.d.ts +1 -1
- package/dist/swagger/decorators.d.ts.map +1 -1
- package/dist/swagger/types.d.ts +1 -1
- package/dist/swagger/types.d.ts.map +1 -1
- package/dist/testing/harness.d.ts +1 -1
- package/dist/testing/harness.d.ts.map +1 -1
- package/dist/testing/test-client.d.ts +1 -1
- package/dist/testing/test-client.d.ts.map +1 -1
- package/dist/testing/testing-module.d.ts +2 -2
- package/dist/testing/testing-module.d.ts.map +1 -1
- package/dist/validation/errors.d.ts +5 -1
- package/dist/validation/errors.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/ai/types.ts +5 -0
- package/src/auth/types.ts +4 -1
- package/src/cache/interceptors.ts +6 -6
- package/src/cache/service-proxy.ts +2 -2
- package/src/cache/service.ts +17 -8
- package/src/cache/types.ts +12 -12
- package/src/config/service.ts +8 -6
- package/src/core/application.ts +7 -1
- package/src/core/context.ts +6 -3
- package/src/database/sqlite-adapter.ts +4 -3
- package/src/di/container.ts +13 -0
- package/src/di/module-registry.ts +2 -3
- package/src/di/module.ts +21 -2
- package/src/di/types.ts +1 -2
- package/src/error/handler.ts +3 -4
- package/src/error/http-exception.ts +11 -11
- package/src/error/index.ts +1 -1
- package/src/events/service.ts +4 -2
- package/src/events/types.ts +14 -3
- package/src/interceptor/base-interceptor.ts +5 -6
- package/src/interceptor/builtin/log-interceptor.ts +2 -3
- package/src/interceptor/builtin/permission-interceptor.ts +2 -3
- package/src/interceptor/interceptor-chain.ts +6 -7
- package/src/interceptor/interceptor-registry.ts +5 -3
- package/src/interceptor/types.ts +9 -4
- package/src/microservice/service-client/types.ts +1 -1
- package/src/microservice/tracing/tracer.ts +15 -3
- package/src/middleware/builtin/file-upload.ts +3 -2
- package/src/middleware/builtin/rate-limit.ts +22 -5
- package/src/queue/service.ts +1 -1
- package/src/queue/types.ts +40 -1
- package/src/router/decorators.ts +2 -3
- package/src/security/guards/types.ts +2 -1
- package/src/security/types.ts +1 -2
- package/src/session/service.ts +1 -1
- package/src/session/types.ts +10 -0
- package/src/swagger/decorators.ts +15 -4
- package/src/swagger/generator.ts +2 -3
- package/src/swagger/types.ts +1 -2
- package/src/testing/harness.ts +1 -2
- package/src/testing/test-client.ts +2 -2
- package/src/testing/testing-module.ts +5 -5
- package/src/validation/errors.ts +6 -2
- package/tests/bun-test-shim.d.ts +11 -0
- package/tests/controller/context-decorator.test.ts +1 -2
- package/tests/di/module.test.ts +199 -1
- package/tests/events/event-emitter.test.ts +2 -2
- package/tests/global.d.ts +30 -0
- package/tests/queue/queue-service.test.ts +14 -0
- package/tests/testing/testing-module.test.ts +20 -0
package/dist/events/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @template T - 事件负载类型
|
|
4
4
|
*/
|
|
5
5
|
export interface EventListener<T = unknown> {
|
|
6
|
-
(payload: T):
|
|
6
|
+
(payload: T): unknown | Promise<unknown>;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* 事件元数据
|
|
@@ -54,13 +54,13 @@ export interface EventEmitter {
|
|
|
54
54
|
* @param event - 事件名称或标识符
|
|
55
55
|
* @param payload - 事件负载
|
|
56
56
|
*/
|
|
57
|
-
emit<T>(event: string | symbol, payload
|
|
57
|
+
emit<T = undefined>(event: string | symbol, payload?: T): void;
|
|
58
58
|
/**
|
|
59
59
|
* 异步发布事件(等待所有监听器完成)
|
|
60
60
|
* @param event - 事件名称或标识符
|
|
61
61
|
* @param payload - 事件负载
|
|
62
62
|
*/
|
|
63
|
-
emitAsync<T>(event: string | symbol, payload
|
|
63
|
+
emitAsync<T = undefined>(event: string | symbol, payload?: T): Promise<void>;
|
|
64
64
|
/**
|
|
65
65
|
* 订阅事件
|
|
66
66
|
* @param event - 事件名称或标识符
|
|
@@ -136,6 +136,11 @@ export interface EventModuleOptions {
|
|
|
136
136
|
* @default 10
|
|
137
137
|
*/
|
|
138
138
|
maxListeners?: number;
|
|
139
|
+
/**
|
|
140
|
+
* 默认是否异步处理监听器,兼容早期模块配置。
|
|
141
|
+
* @default false
|
|
142
|
+
*/
|
|
143
|
+
async?: boolean;
|
|
139
144
|
/**
|
|
140
145
|
* 错误处理函数
|
|
141
146
|
* @param error - 错误对象
|
|
@@ -143,6 +148,10 @@ export interface EventModuleOptions {
|
|
|
143
148
|
* @param payload - 事件负载
|
|
144
149
|
*/
|
|
145
150
|
onError?: (error: Error, event: string | symbol, payload: unknown) => void;
|
|
151
|
+
/**
|
|
152
|
+
* 错误处理函数别名,参数顺序为 (event, error)。
|
|
153
|
+
*/
|
|
154
|
+
errorHandler?: (event: string, error: Error, payload: unknown) => void;
|
|
146
155
|
/**
|
|
147
156
|
* 是否自动扫描和注册事件监听器
|
|
148
157
|
* 当设置为 true 时,框架会在应用启动时自动扫描所有模块中使用 @OnEvent 装饰器的类
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,CAAC,OAAO,EAAE,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13131,8 +13131,9 @@ var init_http_exception = __esm(() => {
|
|
|
13131
13131
|
this.messageParams = messageParams;
|
|
13132
13132
|
}
|
|
13133
13133
|
static withCode(code, message, details, messageParams) {
|
|
13134
|
-
const
|
|
13135
|
-
const
|
|
13134
|
+
const knownCode = code;
|
|
13135
|
+
const status = ERROR_CODE_TO_STATUS[knownCode] || 500;
|
|
13136
|
+
const finalMessage = message || ERROR_CODE_MESSAGES[knownCode] || "Internal Server Error";
|
|
13136
13137
|
return new HttpException(status, finalMessage, details, code, messageParams);
|
|
13137
13138
|
}
|
|
13138
13139
|
};
|
|
@@ -14156,7 +14157,7 @@ async function handleError(error, context) {
|
|
|
14156
14157
|
});
|
|
14157
14158
|
}
|
|
14158
14159
|
let errorMessage = error.message;
|
|
14159
|
-
if (error.code) {
|
|
14160
|
+
if (error.code && error.code in ERROR_CODE_MESSAGES) {
|
|
14160
14161
|
const acceptLanguage = context.getHeader("accept-language");
|
|
14161
14162
|
const language = ErrorMessageI18n.parseLanguageFromHeader(acceptLanguage);
|
|
14162
14163
|
errorMessage = ErrorMessageI18n.getMessage(error.code, language, error.messageParams);
|
|
@@ -14198,6 +14199,7 @@ var init_handler = __esm(() => {
|
|
|
14198
14199
|
init_http_exception();
|
|
14199
14200
|
init_validation();
|
|
14200
14201
|
init_i18n();
|
|
14202
|
+
init_error_codes();
|
|
14201
14203
|
});
|
|
14202
14204
|
|
|
14203
14205
|
// src/error/index.ts
|
|
@@ -14578,7 +14580,8 @@ class Container {
|
|
|
14578
14580
|
typeToToken = new Map;
|
|
14579
14581
|
dependencyPlans = new Map;
|
|
14580
14582
|
postProcessors = [];
|
|
14581
|
-
register(token,
|
|
14583
|
+
register(token, configOrImplementation) {
|
|
14584
|
+
const config = typeof configOrImplementation === "function" ? { implementation: configOrImplementation } : configOrImplementation;
|
|
14582
14585
|
const tokenKey = this.getTokenKey(token);
|
|
14583
14586
|
let lifecycle = config?.lifecycle;
|
|
14584
14587
|
if (!lifecycle && typeof token === "function") {
|
|
@@ -15324,9 +15327,11 @@ function defaultKeyGenerator(context) {
|
|
|
15324
15327
|
function createRateLimitMiddleware(options) {
|
|
15325
15328
|
const {
|
|
15326
15329
|
max,
|
|
15330
|
+
limit,
|
|
15327
15331
|
windowMs = 60000,
|
|
15328
15332
|
store = new MemoryRateLimitStore,
|
|
15329
15333
|
keyGenerator = defaultKeyGenerator,
|
|
15334
|
+
skip,
|
|
15330
15335
|
skipSuccessfulRequests = false,
|
|
15331
15336
|
skipFailedRequests = false,
|
|
15332
15337
|
message = "Too Many Requests",
|
|
@@ -15334,22 +15339,26 @@ function createRateLimitMiddleware(options) {
|
|
|
15334
15339
|
standardHeaders = true,
|
|
15335
15340
|
legacyHeaders = true
|
|
15336
15341
|
} = options;
|
|
15342
|
+
const requestLimit = limit ?? max ?? 100;
|
|
15337
15343
|
return async (context, next) => {
|
|
15344
|
+
if (skip && await skip(context)) {
|
|
15345
|
+
return await next();
|
|
15346
|
+
}
|
|
15338
15347
|
const key = await keyGenerator(context);
|
|
15339
15348
|
const currentCount = await store.increment(key, windowMs);
|
|
15340
|
-
const remaining = Math.max(0,
|
|
15349
|
+
const remaining = Math.max(0, requestLimit - currentCount);
|
|
15341
15350
|
const resetTime = Date.now() + windowMs;
|
|
15342
15351
|
if (standardHeaders) {
|
|
15343
|
-
context.setHeader("RateLimit-Limit",
|
|
15352
|
+
context.setHeader("RateLimit-Limit", requestLimit.toString());
|
|
15344
15353
|
context.setHeader("RateLimit-Remaining", remaining.toString());
|
|
15345
15354
|
context.setHeader("RateLimit-Reset", Math.ceil(resetTime / 1000).toString());
|
|
15346
15355
|
}
|
|
15347
15356
|
if (legacyHeaders) {
|
|
15348
|
-
context.setHeader("X-RateLimit-Limit",
|
|
15357
|
+
context.setHeader("X-RateLimit-Limit", requestLimit.toString());
|
|
15349
15358
|
context.setHeader("X-RateLimit-Remaining", remaining.toString());
|
|
15350
15359
|
context.setHeader("X-RateLimit-Reset", Math.ceil(resetTime / 1000).toString());
|
|
15351
15360
|
}
|
|
15352
|
-
if (currentCount >
|
|
15361
|
+
if (currentCount > requestLimit) {
|
|
15353
15362
|
context.setStatus(statusCode);
|
|
15354
15363
|
return context.createErrorResponse({
|
|
15355
15364
|
error: message,
|
|
@@ -15627,7 +15636,7 @@ var init_file_handler = __esm(() => {
|
|
|
15627
15636
|
|
|
15628
15637
|
// src/middleware/builtin/file-upload.ts
|
|
15629
15638
|
function createFileUploadMiddleware(options = {}) {
|
|
15630
|
-
const maxSize = options.maxSize ?? 10 * 1024 * 1024;
|
|
15639
|
+
const maxSize = options.maxSize ?? options.maxFileSize ?? 10 * 1024 * 1024;
|
|
15631
15640
|
return async (context, next) => {
|
|
15632
15641
|
const contentType = context.getHeader("Content-Type");
|
|
15633
15642
|
if (!contentType || !contentType.includes("multipart/form-data")) {
|
|
@@ -15743,6 +15752,7 @@ var init_types3 = __esm(() => {
|
|
|
15743
15752
|
class InterceptorRegistry {
|
|
15744
15753
|
interceptors = new Map;
|
|
15745
15754
|
register(metadataKey, interceptor, priority = 100) {
|
|
15755
|
+
const resolvedPriority = typeof priority === "number" ? priority : priority.priority ?? 100;
|
|
15746
15756
|
if (!this.interceptors.has(metadataKey)) {
|
|
15747
15757
|
this.interceptors.set(metadataKey, []);
|
|
15748
15758
|
}
|
|
@@ -15752,7 +15762,7 @@ class InterceptorRegistry {
|
|
|
15752
15762
|
metadataList.push({
|
|
15753
15763
|
metadataKey,
|
|
15754
15764
|
interceptor,
|
|
15755
|
-
priority
|
|
15765
|
+
priority: resolvedPriority
|
|
15756
15766
|
});
|
|
15757
15767
|
metadataList.sort((a, b2) => a.priority - b2.priority);
|
|
15758
15768
|
}
|
|
@@ -16050,6 +16060,13 @@ var init_logger_extension = __esm(() => {
|
|
|
16050
16060
|
|
|
16051
16061
|
// src/di/module.ts
|
|
16052
16062
|
import"reflect-metadata";
|
|
16063
|
+
function invokeFactoryProvider(provider, container) {
|
|
16064
|
+
const inject = provider.inject ?? [];
|
|
16065
|
+
if (inject.length > 0) {
|
|
16066
|
+
return provider.useFactory(...inject.map((token) => container.resolve(token)));
|
|
16067
|
+
}
|
|
16068
|
+
return provider.useFactory(container);
|
|
16069
|
+
}
|
|
16053
16070
|
function Module(metadata) {
|
|
16054
16071
|
return (target) => {
|
|
16055
16072
|
Reflect.defineMetadata(MODULE_METADATA_KEY, metadata, target);
|
|
@@ -39999,8 +40016,10 @@ class Context {
|
|
|
39999
40016
|
_body;
|
|
40000
40017
|
_bodyParsed = false;
|
|
40001
40018
|
signal;
|
|
40002
|
-
|
|
40019
|
+
container;
|
|
40020
|
+
constructor(request, container) {
|
|
40003
40021
|
this.request = request;
|
|
40022
|
+
this.container = container;
|
|
40004
40023
|
this.url = new URL2(request.url);
|
|
40005
40024
|
this.method = request.method;
|
|
40006
40025
|
this.path = this.url.pathname;
|
|
@@ -40713,7 +40732,7 @@ class ModuleRegistry {
|
|
|
40713
40732
|
if ("useFactory" in provider) {
|
|
40714
40733
|
container.register(provider.provide, {
|
|
40715
40734
|
lifecycle: provider.lifecycle ?? "singleton" /* Singleton */,
|
|
40716
|
-
factory: () => provider
|
|
40735
|
+
factory: () => invokeFactoryProvider(provider, container)
|
|
40717
40736
|
});
|
|
40718
40737
|
continue;
|
|
40719
40738
|
}
|
|
@@ -41020,7 +41039,7 @@ class ConfigService {
|
|
|
41020
41039
|
this.config = newConfig;
|
|
41021
41040
|
for (const listener of this.configUpdateListeners) {
|
|
41022
41041
|
try {
|
|
41023
|
-
listener(
|
|
41042
|
+
listener(this.config);
|
|
41024
41043
|
} catch (error) {
|
|
41025
41044
|
console.error("[ConfigService] Error in config update listener:", error);
|
|
41026
41045
|
}
|
|
@@ -41528,9 +41547,10 @@ class CacheService {
|
|
|
41528
41547
|
defaultTtl;
|
|
41529
41548
|
keyPrefix;
|
|
41530
41549
|
constructor(options) {
|
|
41531
|
-
|
|
41532
|
-
this.
|
|
41533
|
-
this.
|
|
41550
|
+
const resolvedOptions = isCacheStore(options) ? { store: options } : options;
|
|
41551
|
+
this.store = resolvedOptions.store;
|
|
41552
|
+
this.defaultTtl = resolvedOptions.defaultTtl ?? 3600000;
|
|
41553
|
+
this.keyPrefix = resolvedOptions.keyPrefix ?? "";
|
|
41534
41554
|
}
|
|
41535
41555
|
async get(key) {
|
|
41536
41556
|
return this.store.get(this.getKey(key));
|
|
@@ -41587,9 +41607,12 @@ CacheService = __legacyDecorateClassTS([
|
|
|
41587
41607
|
Injectable(),
|
|
41588
41608
|
__legacyDecorateParamTS(0, Inject(CACHE_OPTIONS_TOKEN)),
|
|
41589
41609
|
__legacyMetadataTS("design:paramtypes", [
|
|
41590
|
-
|
|
41610
|
+
Object
|
|
41591
41611
|
])
|
|
41592
41612
|
], CacheService);
|
|
41613
|
+
function isCacheStore(value) {
|
|
41614
|
+
return typeof value.get === "function" && typeof value.set === "function" && typeof value.delete === "function";
|
|
41615
|
+
}
|
|
41593
41616
|
|
|
41594
41617
|
// src/cache/service-proxy.ts
|
|
41595
41618
|
import"reflect-metadata";
|
|
@@ -42133,6 +42156,8 @@ class EventEmitterService {
|
|
|
42133
42156
|
handleError(error, event, payload) {
|
|
42134
42157
|
if (this.options.onError) {
|
|
42135
42158
|
this.options.onError(error, event, payload);
|
|
42159
|
+
} else if (this.options.errorHandler) {
|
|
42160
|
+
this.options.errorHandler(String(event), error, payload);
|
|
42136
42161
|
} else {
|
|
42137
42162
|
console.error(`[EventEmitter] Error in listener for event "${String(event)}":`, error);
|
|
42138
42163
|
}
|
|
@@ -42777,6 +42802,9 @@ class Application {
|
|
|
42777
42802
|
getServer() {
|
|
42778
42803
|
return this.server;
|
|
42779
42804
|
}
|
|
42805
|
+
getNativeServer() {
|
|
42806
|
+
return this.server?.getNativeServer();
|
|
42807
|
+
}
|
|
42780
42808
|
async registerServices(port, hostname) {
|
|
42781
42809
|
if (ServiceRegistryModule.autoRegister === false) {
|
|
42782
42810
|
return;
|
|
@@ -43277,11 +43305,17 @@ function ApiOperation(metadata) {
|
|
|
43277
43305
|
};
|
|
43278
43306
|
}
|
|
43279
43307
|
function ApiParam(metadata) {
|
|
43280
|
-
|
|
43308
|
+
const decorator = (target, propertyKey, descriptorOrParameterIndex) => {
|
|
43309
|
+
const paramMetadata = {
|
|
43310
|
+
in: "path",
|
|
43311
|
+
...metadata
|
|
43312
|
+
};
|
|
43281
43313
|
const existingParams = Reflect.getMetadata(API_PARAM_METADATA_KEY, target, propertyKey) || [];
|
|
43282
|
-
|
|
43314
|
+
const index = typeof descriptorOrParameterIndex === "number" ? descriptorOrParameterIndex : -1;
|
|
43315
|
+
existingParams.push({ index, metadata: paramMetadata });
|
|
43283
43316
|
Reflect.defineMetadata(API_PARAM_METADATA_KEY, existingParams, target, propertyKey);
|
|
43284
43317
|
};
|
|
43318
|
+
return decorator;
|
|
43285
43319
|
}
|
|
43286
43320
|
function ApiBody(metadata) {
|
|
43287
43321
|
return function(target, propertyKey) {
|
|
@@ -43398,7 +43432,7 @@ class SwaggerGenerator {
|
|
|
43398
43432
|
const pathParamMatches = fullPath.matchAll(/\{([^}]+)\}/g);
|
|
43399
43433
|
for (const match of pathParamMatches) {
|
|
43400
43434
|
const paramName = match[1];
|
|
43401
|
-
const existingParam = params.find((p) => p.metadata.name === paramName && p.metadata.in === "path");
|
|
43435
|
+
const existingParam = params.find((p) => p.metadata.name === paramName && (p.metadata.in ?? "path") === "path");
|
|
43402
43436
|
if (!existingParam) {
|
|
43403
43437
|
pathParams.push({
|
|
43404
43438
|
name: paramName,
|
|
@@ -43411,7 +43445,7 @@ class SwaggerGenerator {
|
|
|
43411
43445
|
for (const param of params) {
|
|
43412
43446
|
pathParams.push({
|
|
43413
43447
|
name: param.metadata.name,
|
|
43414
|
-
in: param.metadata.in,
|
|
43448
|
+
in: param.metadata.in ?? "path",
|
|
43415
43449
|
description: param.metadata.description,
|
|
43416
43450
|
required: param.metadata.required,
|
|
43417
43451
|
schema: param.metadata.schema
|
|
@@ -48032,6 +48066,7 @@ class StressTester {
|
|
|
48032
48066
|
}
|
|
48033
48067
|
// src/testing/testing-module.ts
|
|
48034
48068
|
import"reflect-metadata";
|
|
48069
|
+
init_module();
|
|
48035
48070
|
|
|
48036
48071
|
// src/testing/test-client.ts
|
|
48037
48072
|
class TestHttpClient {
|
|
@@ -48195,7 +48230,7 @@ class TestingModule {
|
|
|
48195
48230
|
container.registerInstance(provider.provide, provider.useValue);
|
|
48196
48231
|
} else if ("useFactory" in provider && provider.provide) {
|
|
48197
48232
|
container.register(provider.provide, {
|
|
48198
|
-
factory: () => provider
|
|
48233
|
+
factory: () => invokeFactoryProvider(provider, container)
|
|
48199
48234
|
});
|
|
48200
48235
|
} else if ("useClass" in provider) {
|
|
48201
48236
|
const token = provider.provide ?? provider.useClass;
|
|
@@ -48637,7 +48672,7 @@ class SessionService {
|
|
|
48637
48672
|
constructor(options) {
|
|
48638
48673
|
this.store = options.store;
|
|
48639
48674
|
this.name = options.name ?? "sessionId";
|
|
48640
|
-
this.maxAge = options.maxAge ?? 86400000;
|
|
48675
|
+
this.maxAge = options.maxAge ?? options.ttl ?? 86400000;
|
|
48641
48676
|
this.rolling = options.rolling ?? true;
|
|
48642
48677
|
this.cookieOptions = {
|
|
48643
48678
|
secure: options.cookie?.secure ?? false,
|
|
@@ -49347,14 +49382,15 @@ class Tracer {
|
|
|
49347
49382
|
Object.assign(span.tags, tags);
|
|
49348
49383
|
}
|
|
49349
49384
|
}
|
|
49350
|
-
addSpanEvent(spanId, event) {
|
|
49385
|
+
addSpanEvent(spanId, event, attributes) {
|
|
49351
49386
|
const span = this.activeSpans.get(spanId);
|
|
49352
49387
|
if (span) {
|
|
49353
49388
|
if (!span.events) {
|
|
49354
49389
|
span.events = [];
|
|
49355
49390
|
}
|
|
49391
|
+
const spanEvent = typeof event === "string" ? { name: event, attributes } : event;
|
|
49356
49392
|
span.events.push({
|
|
49357
|
-
...
|
|
49393
|
+
...spanEvent,
|
|
49358
49394
|
timestamp: Date.now()
|
|
49359
49395
|
});
|
|
49360
49396
|
}
|
|
@@ -50057,6 +50093,7 @@ class ServiceMetricsCollector {
|
|
|
50057
50093
|
var AI_SERVICE_TOKEN = Symbol("@dangao/bun-server:ai:service");
|
|
50058
50094
|
var AI_MODULE_OPTIONS_TOKEN = Symbol("@dangao/bun-server:ai:options");
|
|
50059
50095
|
var AI_TOOL_REGISTRY_TOKEN = Symbol("@dangao/bun-server:ai:tool-registry");
|
|
50096
|
+
var MODULE_METADATA_KEY3 = "@dangao/bun-server:ai:module";
|
|
50060
50097
|
var AI_TOOL_METADATA_KEY = "@dangao/bun-server:ai:tool";
|
|
50061
50098
|
// src/ai/errors.ts
|
|
50062
50099
|
init_http_exception();
|
|
@@ -52840,6 +52877,7 @@ export {
|
|
|
52840
52877
|
Max,
|
|
52841
52878
|
Matches,
|
|
52842
52879
|
MarkdownChunker,
|
|
52880
|
+
MODULE_METADATA_KEY3 as MODULE_METADATA_KEY,
|
|
52843
52881
|
METRICS_SERVICE_TOKEN,
|
|
52844
52882
|
METRICS_OPTIONS_TOKEN,
|
|
52845
52883
|
MCP_TOOL_METADATA_KEY,
|
package/dist/index.node.mjs
CHANGED
|
@@ -1125,8 +1125,9 @@ var init_http_exception = __esm(() => {
|
|
|
1125
1125
|
this.messageParams = messageParams;
|
|
1126
1126
|
}
|
|
1127
1127
|
static withCode(code, message, details, messageParams) {
|
|
1128
|
-
const
|
|
1129
|
-
const
|
|
1128
|
+
const knownCode = code;
|
|
1129
|
+
const status = ERROR_CODE_TO_STATUS[knownCode] || 500;
|
|
1130
|
+
const finalMessage = message || ERROR_CODE_MESSAGES[knownCode] || "Internal Server Error";
|
|
1130
1131
|
return new HttpException(status, finalMessage, details, code, messageParams);
|
|
1131
1132
|
}
|
|
1132
1133
|
};
|
|
@@ -2150,7 +2151,7 @@ async function handleError(error, context) {
|
|
|
2150
2151
|
});
|
|
2151
2152
|
}
|
|
2152
2153
|
let errorMessage = error.message;
|
|
2153
|
-
if (error.code) {
|
|
2154
|
+
if (error.code && error.code in ERROR_CODE_MESSAGES) {
|
|
2154
2155
|
const acceptLanguage = context.getHeader("accept-language");
|
|
2155
2156
|
const language = ErrorMessageI18n.parseLanguageFromHeader(acceptLanguage);
|
|
2156
2157
|
errorMessage = ErrorMessageI18n.getMessage(error.code, language, error.messageParams);
|
|
@@ -2192,6 +2193,7 @@ var init_handler = __esm(() => {
|
|
|
2192
2193
|
init_http_exception();
|
|
2193
2194
|
init_validation();
|
|
2194
2195
|
init_i18n();
|
|
2196
|
+
init_error_codes();
|
|
2195
2197
|
});
|
|
2196
2198
|
|
|
2197
2199
|
// src/error/index.ts
|
|
@@ -2572,7 +2574,8 @@ class Container {
|
|
|
2572
2574
|
typeToToken = new Map;
|
|
2573
2575
|
dependencyPlans = new Map;
|
|
2574
2576
|
postProcessors = [];
|
|
2575
|
-
register(token,
|
|
2577
|
+
register(token, configOrImplementation) {
|
|
2578
|
+
const config = typeof configOrImplementation === "function" ? { implementation: configOrImplementation } : configOrImplementation;
|
|
2576
2579
|
const tokenKey = this.getTokenKey(token);
|
|
2577
2580
|
let lifecycle = config?.lifecycle;
|
|
2578
2581
|
if (!lifecycle && typeof token === "function") {
|
|
@@ -3318,9 +3321,11 @@ function defaultKeyGenerator(context) {
|
|
|
3318
3321
|
function createRateLimitMiddleware(options) {
|
|
3319
3322
|
const {
|
|
3320
3323
|
max,
|
|
3324
|
+
limit,
|
|
3321
3325
|
windowMs = 60000,
|
|
3322
3326
|
store = new MemoryRateLimitStore,
|
|
3323
3327
|
keyGenerator = defaultKeyGenerator,
|
|
3328
|
+
skip,
|
|
3324
3329
|
skipSuccessfulRequests = false,
|
|
3325
3330
|
skipFailedRequests = false,
|
|
3326
3331
|
message = "Too Many Requests",
|
|
@@ -3328,22 +3333,26 @@ function createRateLimitMiddleware(options) {
|
|
|
3328
3333
|
standardHeaders = true,
|
|
3329
3334
|
legacyHeaders = true
|
|
3330
3335
|
} = options;
|
|
3336
|
+
const requestLimit = limit ?? max ?? 100;
|
|
3331
3337
|
return async (context, next) => {
|
|
3338
|
+
if (skip && await skip(context)) {
|
|
3339
|
+
return await next();
|
|
3340
|
+
}
|
|
3332
3341
|
const key = await keyGenerator(context);
|
|
3333
3342
|
const currentCount = await store.increment(key, windowMs);
|
|
3334
|
-
const remaining = Math.max(0,
|
|
3343
|
+
const remaining = Math.max(0, requestLimit - currentCount);
|
|
3335
3344
|
const resetTime = Date.now() + windowMs;
|
|
3336
3345
|
if (standardHeaders) {
|
|
3337
|
-
context.setHeader("RateLimit-Limit",
|
|
3346
|
+
context.setHeader("RateLimit-Limit", requestLimit.toString());
|
|
3338
3347
|
context.setHeader("RateLimit-Remaining", remaining.toString());
|
|
3339
3348
|
context.setHeader("RateLimit-Reset", Math.ceil(resetTime / 1000).toString());
|
|
3340
3349
|
}
|
|
3341
3350
|
if (legacyHeaders) {
|
|
3342
|
-
context.setHeader("X-RateLimit-Limit",
|
|
3351
|
+
context.setHeader("X-RateLimit-Limit", requestLimit.toString());
|
|
3343
3352
|
context.setHeader("X-RateLimit-Remaining", remaining.toString());
|
|
3344
3353
|
context.setHeader("X-RateLimit-Reset", Math.ceil(resetTime / 1000).toString());
|
|
3345
3354
|
}
|
|
3346
|
-
if (currentCount >
|
|
3355
|
+
if (currentCount > requestLimit) {
|
|
3347
3356
|
context.setStatus(statusCode);
|
|
3348
3357
|
return context.createErrorResponse({
|
|
3349
3358
|
error: message,
|
|
@@ -3621,7 +3630,7 @@ var init_file_handler = __esm(() => {
|
|
|
3621
3630
|
|
|
3622
3631
|
// src/middleware/builtin/file-upload.ts
|
|
3623
3632
|
function createFileUploadMiddleware(options = {}) {
|
|
3624
|
-
const maxSize = options.maxSize ?? 10 * 1024 * 1024;
|
|
3633
|
+
const maxSize = options.maxSize ?? options.maxFileSize ?? 10 * 1024 * 1024;
|
|
3625
3634
|
return async (context, next) => {
|
|
3626
3635
|
const contentType = context.getHeader("Content-Type");
|
|
3627
3636
|
if (!contentType || !contentType.includes("multipart/form-data")) {
|
|
@@ -3737,6 +3746,7 @@ var init_types3 = __esm(() => {
|
|
|
3737
3746
|
class InterceptorRegistry {
|
|
3738
3747
|
interceptors = new Map;
|
|
3739
3748
|
register(metadataKey, interceptor, priority = 100) {
|
|
3749
|
+
const resolvedPriority = typeof priority === "number" ? priority : priority.priority ?? 100;
|
|
3740
3750
|
if (!this.interceptors.has(metadataKey)) {
|
|
3741
3751
|
this.interceptors.set(metadataKey, []);
|
|
3742
3752
|
}
|
|
@@ -3746,7 +3756,7 @@ class InterceptorRegistry {
|
|
|
3746
3756
|
metadataList.push({
|
|
3747
3757
|
metadataKey,
|
|
3748
3758
|
interceptor,
|
|
3749
|
-
priority
|
|
3759
|
+
priority: resolvedPriority
|
|
3750
3760
|
});
|
|
3751
3761
|
metadataList.sort((a, b) => a.priority - b.priority);
|
|
3752
3762
|
}
|
|
@@ -4044,6 +4054,13 @@ var init_logger_extension = __esm(() => {
|
|
|
4044
4054
|
|
|
4045
4055
|
// src/di/module.ts
|
|
4046
4056
|
import"reflect-metadata";
|
|
4057
|
+
function invokeFactoryProvider(provider, container) {
|
|
4058
|
+
const inject = provider.inject ?? [];
|
|
4059
|
+
if (inject.length > 0) {
|
|
4060
|
+
return provider.useFactory(...inject.map((token) => container.resolve(token)));
|
|
4061
|
+
}
|
|
4062
|
+
return provider.useFactory(container);
|
|
4063
|
+
}
|
|
4047
4064
|
function Module(metadata) {
|
|
4048
4065
|
return (target) => {
|
|
4049
4066
|
Reflect.defineMetadata(MODULE_METADATA_KEY, metadata, target);
|
|
@@ -4863,8 +4880,10 @@ class Context {
|
|
|
4863
4880
|
_body;
|
|
4864
4881
|
_bodyParsed = false;
|
|
4865
4882
|
signal;
|
|
4866
|
-
|
|
4883
|
+
container;
|
|
4884
|
+
constructor(request, container) {
|
|
4867
4885
|
this.request = request;
|
|
4886
|
+
this.container = container;
|
|
4868
4887
|
this.url = new URL2(request.url);
|
|
4869
4888
|
this.method = request.method;
|
|
4870
4889
|
this.path = this.url.pathname;
|
|
@@ -5577,7 +5596,7 @@ class ModuleRegistry {
|
|
|
5577
5596
|
if ("useFactory" in provider) {
|
|
5578
5597
|
container.register(provider.provide, {
|
|
5579
5598
|
lifecycle: provider.lifecycle ?? "singleton" /* Singleton */,
|
|
5580
|
-
factory: () => provider
|
|
5599
|
+
factory: () => invokeFactoryProvider(provider, container)
|
|
5581
5600
|
});
|
|
5582
5601
|
continue;
|
|
5583
5602
|
}
|
|
@@ -5884,7 +5903,7 @@ class ConfigService {
|
|
|
5884
5903
|
this.config = newConfig;
|
|
5885
5904
|
for (const listener of this.configUpdateListeners) {
|
|
5886
5905
|
try {
|
|
5887
|
-
listener(
|
|
5906
|
+
listener(this.config);
|
|
5888
5907
|
} catch (error) {
|
|
5889
5908
|
console.error("[ConfigService] Error in config update listener:", error);
|
|
5890
5909
|
}
|
|
@@ -6392,9 +6411,10 @@ class CacheService {
|
|
|
6392
6411
|
defaultTtl;
|
|
6393
6412
|
keyPrefix;
|
|
6394
6413
|
constructor(options) {
|
|
6395
|
-
|
|
6396
|
-
this.
|
|
6397
|
-
this.
|
|
6414
|
+
const resolvedOptions = isCacheStore(options) ? { store: options } : options;
|
|
6415
|
+
this.store = resolvedOptions.store;
|
|
6416
|
+
this.defaultTtl = resolvedOptions.defaultTtl ?? 3600000;
|
|
6417
|
+
this.keyPrefix = resolvedOptions.keyPrefix ?? "";
|
|
6398
6418
|
}
|
|
6399
6419
|
async get(key) {
|
|
6400
6420
|
return this.store.get(this.getKey(key));
|
|
@@ -6451,9 +6471,12 @@ CacheService = __legacyDecorateClassTS([
|
|
|
6451
6471
|
Injectable(),
|
|
6452
6472
|
__legacyDecorateParamTS(0, Inject(CACHE_OPTIONS_TOKEN)),
|
|
6453
6473
|
__legacyMetadataTS("design:paramtypes", [
|
|
6454
|
-
|
|
6474
|
+
Object
|
|
6455
6475
|
])
|
|
6456
6476
|
], CacheService);
|
|
6477
|
+
function isCacheStore(value) {
|
|
6478
|
+
return typeof value.get === "function" && typeof value.set === "function" && typeof value.delete === "function";
|
|
6479
|
+
}
|
|
6457
6480
|
|
|
6458
6481
|
// src/cache/service-proxy.ts
|
|
6459
6482
|
import"reflect-metadata";
|
|
@@ -6997,6 +7020,8 @@ class EventEmitterService {
|
|
|
6997
7020
|
handleError(error, event, payload) {
|
|
6998
7021
|
if (this.options.onError) {
|
|
6999
7022
|
this.options.onError(error, event, payload);
|
|
7023
|
+
} else if (this.options.errorHandler) {
|
|
7024
|
+
this.options.errorHandler(String(event), error, payload);
|
|
7000
7025
|
} else {
|
|
7001
7026
|
console.error(`[EventEmitter] Error in listener for event "${String(event)}":`, error);
|
|
7002
7027
|
}
|
|
@@ -7641,6 +7666,9 @@ class Application {
|
|
|
7641
7666
|
getServer() {
|
|
7642
7667
|
return this.server;
|
|
7643
7668
|
}
|
|
7669
|
+
getNativeServer() {
|
|
7670
|
+
return this.server?.getNativeServer();
|
|
7671
|
+
}
|
|
7644
7672
|
async registerServices(port, hostname) {
|
|
7645
7673
|
if (ServiceRegistryModule.autoRegister === false) {
|
|
7646
7674
|
return;
|
|
@@ -8141,11 +8169,17 @@ function ApiOperation(metadata) {
|
|
|
8141
8169
|
};
|
|
8142
8170
|
}
|
|
8143
8171
|
function ApiParam(metadata) {
|
|
8144
|
-
|
|
8172
|
+
const decorator = (target, propertyKey, descriptorOrParameterIndex) => {
|
|
8173
|
+
const paramMetadata = {
|
|
8174
|
+
in: "path",
|
|
8175
|
+
...metadata
|
|
8176
|
+
};
|
|
8145
8177
|
const existingParams = Reflect.getMetadata(API_PARAM_METADATA_KEY, target, propertyKey) || [];
|
|
8146
|
-
|
|
8178
|
+
const index = typeof descriptorOrParameterIndex === "number" ? descriptorOrParameterIndex : -1;
|
|
8179
|
+
existingParams.push({ index, metadata: paramMetadata });
|
|
8147
8180
|
Reflect.defineMetadata(API_PARAM_METADATA_KEY, existingParams, target, propertyKey);
|
|
8148
8181
|
};
|
|
8182
|
+
return decorator;
|
|
8149
8183
|
}
|
|
8150
8184
|
function ApiBody(metadata) {
|
|
8151
8185
|
return function(target, propertyKey) {
|
|
@@ -8262,7 +8296,7 @@ class SwaggerGenerator {
|
|
|
8262
8296
|
const pathParamMatches = fullPath.matchAll(/\{([^}]+)\}/g);
|
|
8263
8297
|
for (const match of pathParamMatches) {
|
|
8264
8298
|
const paramName = match[1];
|
|
8265
|
-
const existingParam = params.find((p) => p.metadata.name === paramName && p.metadata.in === "path");
|
|
8299
|
+
const existingParam = params.find((p) => p.metadata.name === paramName && (p.metadata.in ?? "path") === "path");
|
|
8266
8300
|
if (!existingParam) {
|
|
8267
8301
|
pathParams.push({
|
|
8268
8302
|
name: paramName,
|
|
@@ -8275,7 +8309,7 @@ class SwaggerGenerator {
|
|
|
8275
8309
|
for (const param of params) {
|
|
8276
8310
|
pathParams.push({
|
|
8277
8311
|
name: param.metadata.name,
|
|
8278
|
-
in: param.metadata.in,
|
|
8312
|
+
in: param.metadata.in ?? "path",
|
|
8279
8313
|
description: param.metadata.description,
|
|
8280
8314
|
required: param.metadata.required,
|
|
8281
8315
|
schema: param.metadata.schema
|
|
@@ -12903,6 +12937,7 @@ class StressTester {
|
|
|
12903
12937
|
}
|
|
12904
12938
|
// src/testing/testing-module.ts
|
|
12905
12939
|
import"reflect-metadata";
|
|
12940
|
+
init_module();
|
|
12906
12941
|
|
|
12907
12942
|
// src/testing/test-client.ts
|
|
12908
12943
|
class TestHttpClient {
|
|
@@ -13066,7 +13101,7 @@ class TestingModule {
|
|
|
13066
13101
|
container.registerInstance(provider.provide, provider.useValue);
|
|
13067
13102
|
} else if ("useFactory" in provider && provider.provide) {
|
|
13068
13103
|
container.register(provider.provide, {
|
|
13069
|
-
factory: () => provider
|
|
13104
|
+
factory: () => invokeFactoryProvider(provider, container)
|
|
13070
13105
|
});
|
|
13071
13106
|
} else if ("useClass" in provider) {
|
|
13072
13107
|
const token = provider.provide ?? provider.useClass;
|
|
@@ -13508,7 +13543,7 @@ class SessionService {
|
|
|
13508
13543
|
constructor(options) {
|
|
13509
13544
|
this.store = options.store;
|
|
13510
13545
|
this.name = options.name ?? "sessionId";
|
|
13511
|
-
this.maxAge = options.maxAge ?? 86400000;
|
|
13546
|
+
this.maxAge = options.maxAge ?? options.ttl ?? 86400000;
|
|
13512
13547
|
this.rolling = options.rolling ?? true;
|
|
13513
13548
|
this.cookieOptions = {
|
|
13514
13549
|
secure: options.cookie?.secure ?? false,
|
|
@@ -14218,14 +14253,15 @@ class Tracer {
|
|
|
14218
14253
|
Object.assign(span.tags, tags);
|
|
14219
14254
|
}
|
|
14220
14255
|
}
|
|
14221
|
-
addSpanEvent(spanId, event) {
|
|
14256
|
+
addSpanEvent(spanId, event, attributes) {
|
|
14222
14257
|
const span = this.activeSpans.get(spanId);
|
|
14223
14258
|
if (span) {
|
|
14224
14259
|
if (!span.events) {
|
|
14225
14260
|
span.events = [];
|
|
14226
14261
|
}
|
|
14262
|
+
const spanEvent = typeof event === "string" ? { name: event, attributes } : event;
|
|
14227
14263
|
span.events.push({
|
|
14228
|
-
...
|
|
14264
|
+
...spanEvent,
|
|
14229
14265
|
timestamp: Date.now()
|
|
14230
14266
|
});
|
|
14231
14267
|
}
|
|
@@ -14928,6 +14964,7 @@ class ServiceMetricsCollector {
|
|
|
14928
14964
|
var AI_SERVICE_TOKEN = Symbol("@dangao/bun-server:ai:service");
|
|
14929
14965
|
var AI_MODULE_OPTIONS_TOKEN = Symbol("@dangao/bun-server:ai:options");
|
|
14930
14966
|
var AI_TOOL_REGISTRY_TOKEN = Symbol("@dangao/bun-server:ai:tool-registry");
|
|
14967
|
+
var MODULE_METADATA_KEY3 = "@dangao/bun-server:ai:module";
|
|
14931
14968
|
var AI_TOOL_METADATA_KEY = "@dangao/bun-server:ai:tool";
|
|
14932
14969
|
// src/ai/errors.ts
|
|
14933
14970
|
init_http_exception();
|
|
@@ -17711,6 +17748,7 @@ export {
|
|
|
17711
17748
|
Max,
|
|
17712
17749
|
Matches,
|
|
17713
17750
|
MarkdownChunker,
|
|
17751
|
+
MODULE_METADATA_KEY3 as MODULE_METADATA_KEY,
|
|
17714
17752
|
METRICS_SERVICE_TOKEN,
|
|
17715
17753
|
METRICS_OPTIONS_TOKEN,
|
|
17716
17754
|
MCP_TOOL_METADATA_KEY,
|
|
@@ -11,7 +11,7 @@ export declare abstract class BaseInterceptor implements Interceptor {
|
|
|
11
11
|
* 执行拦截器逻辑
|
|
12
12
|
* 子类必须实现此方法
|
|
13
13
|
*/
|
|
14
|
-
abstract execute<T>(target: unknown, propertyKey: string | symbol, originalMethod: (...args:
|
|
14
|
+
abstract execute<T>(target: unknown, propertyKey: string | symbol, originalMethod: (...args: any[]) => T | Promise<T>, args: any[], container: Container, context?: Context): Promise<any>;
|
|
15
15
|
/**
|
|
16
16
|
* 前置处理(可选)
|
|
17
17
|
* 在方法执行前调用,子类可以覆盖此方法
|
|
@@ -21,7 +21,7 @@ export declare abstract class BaseInterceptor implements Interceptor {
|
|
|
21
21
|
* @param container - DI 容器
|
|
22
22
|
* @param context - 请求上下文(可选)
|
|
23
23
|
*/
|
|
24
|
-
protected before(target: unknown, propertyKey: string | symbol, args:
|
|
24
|
+
protected before(target: unknown, propertyKey: string | symbol, args: any[], container: Container, context?: Context): Promise<void>;
|
|
25
25
|
/**
|
|
26
26
|
* 后置处理(可选)
|
|
27
27
|
* 在方法执行后调用,子类可以覆盖此方法
|
|
@@ -61,7 +61,7 @@ export declare abstract class BaseInterceptor implements Interceptor {
|
|
|
61
61
|
* @param token - 服务标识符
|
|
62
62
|
* @returns 服务实例
|
|
63
63
|
*/
|
|
64
|
-
protected resolveService<T>(container: Container, token: (new (...args:
|
|
64
|
+
protected resolveService<T>(container: Container, token: (new (...args: any[]) => T) | string | symbol): T;
|
|
65
65
|
/**
|
|
66
66
|
* 从上下文获取值
|
|
67
67
|
* @param context - 请求上下文
|