@taicode/common-base 3.7.12 → 3.7.13
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/output/batching-buffer/batching-buffer.d.ts.map +1 -1
- package/output/batching-buffer/batching-buffer.test.js +0 -1
- package/output/debounce/debounce.d.ts +2 -2
- package/output/debounce/debounce.d.ts.map +1 -1
- package/output/error/error.d.ts.map +1 -1
- package/output/event-emitter/event-emitter.test.js +0 -1
- package/output/flow-queue/flow-queue.d.ts +2 -2
- package/output/flow-queue/flow-queue.d.ts.map +1 -1
- package/output/flow-queue/flow-queue.js +4 -2
- package/output/flow-queue/flow-queue.test.js +3 -4
- package/output/logger/formatter.d.ts +8 -8
- package/output/logger/formatter.d.ts.map +1 -1
- package/output/logger/formatter.test.js +4 -4
- package/output/logger/logger.d.ts +9 -9
- package/output/logger/logger.d.ts.map +1 -1
- package/output/logger/logger.js +1 -1
- package/output/logger/logger.test.js +1 -1
- package/output/logger/transport.d.ts +2 -6
- package/output/logger/transport.d.ts.map +1 -1
- package/output/logger/transport.js +4 -0
- package/output/logger/transport.test.js +1 -1
- package/output/object/object.d.ts.map +1 -1
- package/output/object/object.js +10 -7
- package/output/throttle/throttle.d.ts +2 -2
- package/output/throttle/throttle.d.ts.map +1 -1
- package/output/throttle/throttle.js +6 -5
- package/output/ttl-cache/ttl-cache.d.ts.map +1 -1
- package/package.json +11 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batching-buffer.d.ts","sourceRoot":"","sources":["../../source/batching-buffer/batching-buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAErD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAEjD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"batching-buffer.d.ts","sourceRoot":"","sources":["../../source/batching-buffer/batching-buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAErD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAEjD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAsC;IACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAmC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC;IA0B7C;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAmBlB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAyB1B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED;;;OAGG;IACG,OAAO,CAAC,cAAc,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5D;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;YACW,kBAAkB;CA2BjC"}
|
|
@@ -214,7 +214,6 @@ describe('BatchingBuffer', () => {
|
|
|
214
214
|
expect(buffer.isEmpty).toBe(false);
|
|
215
215
|
});
|
|
216
216
|
it('应该正确报告距离上次刷新的时间', async () => {
|
|
217
|
-
const startTime = Date.now();
|
|
218
217
|
buffer.add(1);
|
|
219
218
|
vi.advanceTimersByTime(500);
|
|
220
219
|
expect(buffer.timeSinceLastFlush).toBeGreaterThanOrEqual(500);
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* 防抖装饰器 - 基于 TC39 Stage 3 Decorators 提案
|
|
3
3
|
* 在最后一次调用后等待指定时间才执行函数
|
|
4
4
|
*/
|
|
5
|
-
export declare function debounceFn<
|
|
6
|
-
export declare function debounce<T extends (...args:
|
|
5
|
+
export declare function debounceFn<A extends unknown[], R>(fn: (...args: A) => R, wait: number): (...args: A) => R;
|
|
6
|
+
export declare function debounce<T extends (...args: never[]) => unknown>(wait: number): (originalMethod: T, context: ClassMethodDecoratorContext) => T;
|
|
7
7
|
//# sourceMappingURL=debounce.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../source/debounce/debounce.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../source/debounce/debounce.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,wBAAgB,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAmBzG;AAGD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,MAAM,IAC3D,gBAAgB,CAAC,EAAE,SAAS,2BAA2B,KAAG,CAAC,CAS7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../source/error/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,eAAe;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAmBD;;;GAGG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../source/error/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,eAAe;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAmBD;;;GAGG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;IAC1C,IAAI,EAAE,CAAC;IAAS,OAAO,CAAC,EAAE,YAAY;IAAS,OAAO,EAAE,MAAM;gBAA9D,IAAI,EAAE,CAAC,EAAS,OAAO,CAAC,EAAE,YAAY,YAAA,EAAS,OAAO,GAAE,MAAW;IAMtF,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;IAI3E;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK;2DAWhC,KAAK,8BAAW,YAAW,MAAM;;+BAL9C,KAAK,8BAAW;;;;;;QAE1C,kBAAkB;wBACiC,8BAAW;kBAW7C,OAAO,GAAG,KAAK;;+BAdN,KAAK,8BAAW;;;;;SAcQ;;;;;;CAKvD;AAED;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,KAAK;IAC5C,IAAI,EAAE,CAAC;IAAS,OAAO,CAAC,EAAE,YAAY;IAAS,OAAO,EAAE,MAAM;gBAA9D,IAAI,EAAE,CAAC,EAAS,OAAO,CAAC,EAAE,YAAY,YAAA,EAAS,OAAO,GAAE,MAAW;IAMtF,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC;IAI7E;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK;2DAWhC,KAAK,8BAAW,YAAW,MAAM;;+BAL9C,KAAK,8BAAW;;;;;;QAE1C,kBAAkB;wBACiC,8BAAW;kBAW7C,OAAO,GAAG,KAAK;;+BAdN,KAAK,8BAAW;;;;;SAcU;;;;;;CAKzD"}
|
|
@@ -95,7 +95,6 @@ describe('EventEmitter', () => {
|
|
|
95
95
|
expect(goodListener).toHaveBeenCalledWith('test data');
|
|
96
96
|
});
|
|
97
97
|
it('应该创建监听器数组的副本以避免并发修改问题', () => {
|
|
98
|
-
const listeners = [];
|
|
99
98
|
// 创建一个监听器,它会在执行时移除自己
|
|
100
99
|
const selfRemovingListener = () => {
|
|
101
100
|
emitter.off('data-update', selfRemovingListener);
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
* - **并发控制**:支持配置并发处理数量,默认为 1
|
|
79
79
|
* - **链式调用**:支持流畅的链式 API 调用
|
|
80
80
|
*/
|
|
81
|
-
type FlowQueueInput =
|
|
82
|
-
type FlowQueueOutput =
|
|
81
|
+
type FlowQueueInput = Record<never, never>;
|
|
82
|
+
type FlowQueueOutput = Record<never, never>;
|
|
83
83
|
export type FlowQueueOnGenerate<T> = (item: T) => void;
|
|
84
84
|
export type FlowQueueProcessor<I extends FlowQueueInput = FlowQueueInput, O extends FlowQueueOutput = FlowQueueOutput> = (input: I) => Promise<O>;
|
|
85
85
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-queue.d.ts","sourceRoot":"","sources":["../../source/flow-queue/flow-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AASH,KAAK,cAAc,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"flow-queue.d.ts","sourceRoot":"","sources":["../../source/flow-queue/flow-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AASH,KAAK,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC1C,KAAK,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3C,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AACtD,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAEjJ;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,aAAa,GACb,OAAO,GACP,QAAQ,GACR,QAAQ,CAAA;AAGZ,KAAK,wBAAwB,GAAG;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAGD,KAAK,6BAA6B,GAAG,wBAAwB,GAAG;IAC9D,QAAQ,CAAC,EAAE,WAAW,CAAA;CACvB,CAAA;AAGD,KAAK,yBAAyB,GAAG,wBAAwB,GAAG;IAC1D,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,KAAK,+BAA+B,GAAG,wBAAwB,GAAG;IAChE,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,KAAK,0BAA0B,GAAG,wBAAwB,GAAG;IAC3D,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAGD,KAAK,0BAA0B,GAAG,wBAAwB,GAAG;IAC3D,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;CACjE,CAAA;AAGD,MAAM,MAAM,oBAAoB,GAC5B,6BAA6B,GAC7B,yBAAyB,GACzB,+BAA+B,GAC/B,0BAA0B,GAC1B,0BAA0B,CAAA;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,MAAM,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,KAAK,CAAC,EAAE,oBAAoB,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,eAAe;IAiE5D,OAAO,CAAC,OAAO;IAAoB,OAAO,CAAC,SAAS;IAhEhE,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,eAAe,CAAU;IAE1B,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAY;IACrC,cAAc,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAY;IAElD,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,UAAU,CAA4B;IAE9C,OAAO,CAAC,WAAW,CAAiD;IAEpE,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA4B;IAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;gBACiB,OAAO,EAAE,gBAAgB,EAAU,SAAS,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAgB1F;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;YACW,yBAAyB;IAQvC;;;;;OAKG;YACW,WAAW;IA0DzB;;OAEG;YACW,iBAAiB;IAS/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAOtC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,UAAU,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAMxD;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,UAAU,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAO7B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBhC;;;;;;;;;;;;;OAaG;IACH,MAAM,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAYzB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAsBxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,IAAI,MAAM;CA+BhB"}
|
|
@@ -221,26 +221,28 @@ export class FlowQueue {
|
|
|
221
221
|
delay = Math.min(delay, retryConfig.maxDelay);
|
|
222
222
|
}
|
|
223
223
|
break;
|
|
224
|
-
case 'exponential':
|
|
224
|
+
case 'exponential': {
|
|
225
225
|
const multiplier = retryConfig.multiplier ?? 2;
|
|
226
226
|
delay = retryConfig.baseDelay * Math.pow(multiplier, retryCount);
|
|
227
227
|
if (retryConfig.maxDelay) {
|
|
228
228
|
delay = Math.min(delay, retryConfig.maxDelay);
|
|
229
229
|
}
|
|
230
230
|
break;
|
|
231
|
+
}
|
|
231
232
|
case 'linear':
|
|
232
233
|
delay = retryConfig.baseDelay * (retryCount + 1);
|
|
233
234
|
if (retryConfig.maxDelay) {
|
|
234
235
|
delay = Math.min(delay, retryConfig.maxDelay);
|
|
235
236
|
}
|
|
236
237
|
break;
|
|
237
|
-
case 'custom':
|
|
238
|
+
case 'custom': {
|
|
238
239
|
const baseDelay = retryConfig.baseDelay ?? 1000;
|
|
239
240
|
delay = retryConfig.customDelayFn(retryCount, baseDelay);
|
|
240
241
|
if (retryConfig.maxDelay) {
|
|
241
242
|
delay = Math.min(delay, retryConfig.maxDelay);
|
|
242
243
|
}
|
|
243
244
|
break;
|
|
245
|
+
}
|
|
244
246
|
default:
|
|
245
247
|
delay = 0;
|
|
246
248
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
2
|
import { FlowQueue } from './flow-queue.js';
|
|
3
3
|
import { logger } from '../logger/index.js';
|
|
4
4
|
describe('FlowQueue', () => {
|
|
@@ -334,7 +334,6 @@ describe('FlowQueue', () => {
|
|
|
334
334
|
flowQueue = new FlowQueue({
|
|
335
335
|
delay: { base: 100 } // 100ms 延迟
|
|
336
336
|
}, mockProcessor);
|
|
337
|
-
const startTime = Date.now();
|
|
338
337
|
flowQueue.input(...inputs);
|
|
339
338
|
await new Promise(resolve => setTimeout(resolve, 300));
|
|
340
339
|
expect(mockProcessor).toHaveBeenCalledTimes(2);
|
|
@@ -1061,8 +1060,8 @@ describe('FlowQueue', () => {
|
|
|
1061
1060
|
// 等待确保没有更多处理
|
|
1062
1061
|
await new Promise(resolve => setTimeout(resolve, 50));
|
|
1063
1062
|
// 验证处理被中断 - 由于异步操作的时序不确定性,我们只验证处理确实被中断了
|
|
1064
|
-
const firstCallCount = firstProcessor.mock.calls.length;
|
|
1065
|
-
const secondCallCount = secondProcessor.mock.calls.length;
|
|
1063
|
+
const firstCallCount = vi.mocked(firstProcessor).mock.calls.length;
|
|
1064
|
+
const secondCallCount = vi.mocked(secondProcessor).mock.calls.length;
|
|
1066
1065
|
// 主要验证:处理次数应该少于总输入数,说明确实被取消了
|
|
1067
1066
|
expect(firstCallCount).toBeLessThan(inputs.length);
|
|
1068
1067
|
expect(secondCallCount).toBeLessThan(inputs.length);
|
|
@@ -4,13 +4,13 @@ export interface FormatterConfig {
|
|
|
4
4
|
/** 日期格式化器 */
|
|
5
5
|
date?: (date: Date) => string;
|
|
6
6
|
/** 对象格式化器 */
|
|
7
|
-
object?: (obj:
|
|
7
|
+
object?: (obj: object) => string;
|
|
8
8
|
/** 数组格式化器 */
|
|
9
|
-
array?: (arr:
|
|
9
|
+
array?: (arr: unknown[]) => string;
|
|
10
10
|
/** 函数格式化器 */
|
|
11
|
-
function?: (fn:
|
|
11
|
+
function?: (fn: (...args: never[]) => unknown) => string;
|
|
12
12
|
/** 其他类型格式化器 */
|
|
13
|
-
other?: (value:
|
|
13
|
+
other?: (value: unknown) => string;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* 日志格式化器接口
|
|
@@ -18,9 +18,9 @@ export interface FormatterConfig {
|
|
|
18
18
|
*/
|
|
19
19
|
export interface LogFormatter {
|
|
20
20
|
/** 格式化单个参数 */
|
|
21
|
-
format(arg:
|
|
21
|
+
format(arg: unknown): string;
|
|
22
22
|
/** 格式化参数数组 */
|
|
23
|
-
formatArguments(args:
|
|
23
|
+
formatArguments(args: unknown[]): string[];
|
|
24
24
|
}
|
|
25
25
|
export interface ErrorFormatterOptions {
|
|
26
26
|
/** 是否显示堆栈信息 */
|
|
@@ -41,11 +41,11 @@ export declare class DefaultLogFormatter implements LogFormatter {
|
|
|
41
41
|
/**
|
|
42
42
|
* 格式化单个参数
|
|
43
43
|
*/
|
|
44
|
-
format(arg:
|
|
44
|
+
format(arg: unknown): string;
|
|
45
45
|
/**
|
|
46
46
|
* 格式化参数数组
|
|
47
47
|
*/
|
|
48
|
-
formatArguments(args:
|
|
48
|
+
formatArguments(args: unknown[]): string[];
|
|
49
49
|
/**
|
|
50
50
|
* 格式化错误对象
|
|
51
51
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../source/logger/formatter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAA;IAClC,aAAa;IACb,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC7B,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../source/logger/formatter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAA;IAClC,aAAa;IACb,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IAC7B,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAChC,aAAa;IACb,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,MAAM,CAAA;IAClC,aAAa;IACb,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,KAAK,MAAM,CAAA;IACxD,eAAe;IACf,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,cAAc;IACd,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAA;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,gBAAgB;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,MAAM,CAA0C;gBAE5C,MAAM,GAAE,eAAoB,EAAE,YAAY,GAAE,qBAA0B;IAgBlF;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;IAwB5B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE;IAI1C;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;CAWpB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it, expect,
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
2
|
import { DefaultLogFormatter } from './formatter.js';
|
|
3
3
|
import { UserError, SystemError } from '../error/index.js';
|
|
4
4
|
describe('DefaultLogFormatter', () => {
|
|
@@ -13,13 +13,13 @@ describe('DefaultLogFormatter', () => {
|
|
|
13
13
|
});
|
|
14
14
|
it('应该格式化数字', () => {
|
|
15
15
|
const result = formatter.format(123);
|
|
16
|
-
expect(result).toBe(
|
|
16
|
+
expect(result).toBe('123');
|
|
17
17
|
});
|
|
18
18
|
it('应该格式化布尔值', () => {
|
|
19
19
|
const trueResult = formatter.format(true);
|
|
20
20
|
const falseResult = formatter.format(false);
|
|
21
|
-
expect(trueResult).toBe(
|
|
22
|
-
expect(falseResult).toBe(
|
|
21
|
+
expect(trueResult).toBe('true');
|
|
22
|
+
expect(falseResult).toBe('false');
|
|
23
23
|
});
|
|
24
24
|
it('应该格式化 null', () => {
|
|
25
25
|
const result = formatter.format(null);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { LogTransport } from './transport.js';
|
|
2
1
|
import { type LogFormatter } from './formatter.js';
|
|
2
|
+
import type { LogTransport } from './transport.js';
|
|
3
3
|
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
4
4
|
export interface LoggerOptions {
|
|
5
5
|
level?: LogLevel;
|
|
@@ -8,7 +8,7 @@ export interface LoggerOptions {
|
|
|
8
8
|
/** 格式化器实例 */
|
|
9
9
|
formatter?: LogFormatter;
|
|
10
10
|
/** 传统的 print 函数,用于向后兼容 */
|
|
11
|
-
print?: (level: LogLevel, ...args:
|
|
11
|
+
print?: (level: LogLevel, ...args: unknown[]) => void;
|
|
12
12
|
}
|
|
13
13
|
export declare class Logger {
|
|
14
14
|
private _level;
|
|
@@ -26,12 +26,12 @@ export declare class Logger {
|
|
|
26
26
|
* 使用传统 print 方式记录日志(向后兼容)
|
|
27
27
|
*/
|
|
28
28
|
private logToPrint;
|
|
29
|
-
trace(...args:
|
|
30
|
-
debug(...args:
|
|
31
|
-
info(...args:
|
|
32
|
-
warn(...args:
|
|
33
|
-
error(...args:
|
|
34
|
-
fatal(...args:
|
|
29
|
+
trace(...args: unknown[]): void;
|
|
30
|
+
debug(...args: unknown[]): void;
|
|
31
|
+
info(...args: unknown[]): void;
|
|
32
|
+
warn(...args: unknown[]): void;
|
|
33
|
+
error(...args: unknown[]): void;
|
|
34
|
+
fatal(...args: unknown[]): void;
|
|
35
35
|
silent(): void;
|
|
36
36
|
/**
|
|
37
37
|
* 添加 LogTransport
|
|
@@ -53,7 +53,7 @@ export declare class Logger {
|
|
|
53
53
|
* Pino 兼容的 child 方法
|
|
54
54
|
* 创建一个共享配置的子 logger
|
|
55
55
|
*/
|
|
56
|
-
child(bindings?: Record<string,
|
|
56
|
+
child(bindings?: Record<string, unknown>, options?: Partial<LoggerOptions>): Logger;
|
|
57
57
|
/**
|
|
58
58
|
* Pino 兼容的 level getter/setter
|
|
59
59
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../source/logger/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../source/logger/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACvE,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,gBAAgB,CAAA;AAE7D,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAE9E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,oCAAoC;IACpC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAC3B,aAAa;IACb,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACtD;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,KAAK,CAAC,CAA+C;gBAEjD,OAAO,GAAE,aAAkB;IAYvC,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOxB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOxB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOvB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOvB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOxB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOxB,MAAM;IAIN;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAI3C;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAI5C;;OAEG;IACH,aAAa,IAAI,SAAS,YAAY,EAAE;IAIxC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtC;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM;IAgBnF;;OAEG;IACH,IAAI,KAAK,IAAI,QAAQ,CAEpB;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAE3B;CACF;AAED,eAAO,MAAM,MAAM,QAAe,CAAA"}
|
package/output/logger/logger.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// 基础 Logger 实现,支持简单的日志输出和扩展能力
|
|
1
2
|
import { defaultLogFormatter } from './formatter.js';
|
|
2
3
|
export class Logger {
|
|
3
4
|
_level;
|
|
@@ -36,7 +37,6 @@ export class Logger {
|
|
|
36
37
|
default:
|
|
37
38
|
consoleMethod = console.log;
|
|
38
39
|
}
|
|
39
|
-
// eslint-disable-next-line no-console
|
|
40
40
|
consoleMethod(prefix, ...args);
|
|
41
41
|
}
|
|
42
42
|
shouldLog(level) {
|
|
@@ -59,7 +59,7 @@ describe('Logger', () => {
|
|
|
59
59
|
const print = (level, ...args) => logs.push([level, ...args]);
|
|
60
60
|
const logger = new Logger({ print });
|
|
61
61
|
logger.error('err', 123);
|
|
62
|
-
expect(logs).toContainEqual(['error', 'err',
|
|
62
|
+
expect(logs).toContainEqual(['error', 'err', '123']);
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
65
|
describe('Logger 错误处理', () => {
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LogTransport 抽象接口和实现
|
|
3
|
-
* LogTransport 负责处理和存储结构化的日志数据
|
|
4
|
-
*/
|
|
5
1
|
import type { LogLevel } from './logger.js';
|
|
6
2
|
/**
|
|
7
3
|
* 日志记录接口
|
|
@@ -13,9 +9,9 @@ export interface LogRecord {
|
|
|
13
9
|
/** 时间戳 */
|
|
14
10
|
timestamp: Date;
|
|
15
11
|
/** 原始参数数组 */
|
|
16
|
-
args:
|
|
12
|
+
args: unknown[];
|
|
17
13
|
/** 可选的附加元数据 */
|
|
18
|
-
metadata?: Record<string,
|
|
14
|
+
metadata?: Record<string, unknown>;
|
|
19
15
|
}
|
|
20
16
|
/**
|
|
21
17
|
* LogTransport 抽象接口
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../source/logger/transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../source/logger/transport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,KAAK,EAAE,QAAQ,CAAA;IACf,UAAU;IACV,SAAS,EAAE,IAAI,CAAA;IACf,aAAa;IACb,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,aAAa;IACb,KAAK,CAAC,EAAE,QAAQ,CAAA;IAEhB,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;OAGG;IACH,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE5C;;OAEG;IACH,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa;IACb,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,YAAY;IACZ,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,SAAgB,IAAI,EAAE,MAAM,CAAW;IAChC,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,OAAO,EAAE,OAAO,CAAO;IAE9B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAmE;gBAEzF,OAAO,GAAE,sBAA2B;IAQhD;;OAEG;IACH,OAAO,CAAC,SAAS;IAeV,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAQnC;;OAEG;IACI,UAAU,IAAI,SAAS,cAAc,EAAE;IAO9C;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,cAAc,EAAE;IAQ3D;;OAEG;IACI,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,cAAc,EAAE;IAQtE;;;OAGG;IACI,aAAa,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,GAAG,cAAc,EAAE;IAItF;;;OAGG;IACI,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAsB5D;;OAEG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAOxD;;OAEG;IACI,QAAQ,IAAI;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACjC,eAAe,CAAC,EAAE,IAAI,CAAA;QACtB,eAAe,CAAC,EAAE,IAAI,CAAA;KACvB;IA4BD;;OAEG;IACI,KAAK,IAAI,IAAI;IAIpB;;OAEG;IACI,YAAY,IAAI,MAAM;IAI7B;;OAEG;IACI,KAAK,IAAI,IAAI;CAGrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../source/object/object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../source/object/object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAqBjF;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAEhE;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAEnE"}
|
package/output/object/object.js
CHANGED
|
@@ -2,17 +2,20 @@
|
|
|
2
2
|
* 递归合并对象,只针对对象类型的属性进行合并,其他类型后者覆盖前者
|
|
3
3
|
*/
|
|
4
4
|
export function objectMerge(target, ...rest) {
|
|
5
|
+
const targetRecord = target;
|
|
5
6
|
for (const source of rest) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const sourceRecord = source;
|
|
8
|
+
for (const key in sourceRecord) {
|
|
9
|
+
if (Object.prototype.hasOwnProperty.call(sourceRecord, key)) {
|
|
10
|
+
const sourceValue = sourceRecord[key];
|
|
11
|
+
if (typeof sourceValue === 'object' && sourceValue !== null && !Array.isArray(sourceValue)) {
|
|
12
|
+
if (!Object.prototype.hasOwnProperty.call(targetRecord, key)) {
|
|
13
|
+
targetRecord[key] = {};
|
|
11
14
|
}
|
|
12
|
-
objectMerge(
|
|
15
|
+
objectMerge(targetRecord[key], sourceValue);
|
|
13
16
|
}
|
|
14
17
|
else {
|
|
15
|
-
|
|
18
|
+
targetRecord[key] = sourceValue;
|
|
16
19
|
}
|
|
17
20
|
}
|
|
18
21
|
}
|
|
@@ -6,7 +6,7 @@ interface ThrottleOptions {
|
|
|
6
6
|
leading?: boolean;
|
|
7
7
|
trailing?: boolean;
|
|
8
8
|
}
|
|
9
|
-
export declare function throttleFn<
|
|
10
|
-
export declare function throttle<T extends (...args:
|
|
9
|
+
export declare function throttleFn<A extends unknown[], R>(fn: (...args: A) => R, wait: number, options?: ThrottleOptions): (...args: A) => R;
|
|
10
|
+
export declare function throttle<T extends (...args: never[]) => unknown>(wait: number, options?: ThrottleOptions): (originalMethod: T, context: ClassMethodDecoratorContext) => T;
|
|
11
11
|
export type { ThrottleOptions };
|
|
12
12
|
//# sourceMappingURL=throttle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../source/throttle/throttle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAGD,wBAAgB,UAAU,CAAC,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../source/throttle/throttle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAGD,wBAAgB,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAwCxI;AAGD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,IACtF,gBAAgB,CAAC,EAAE,SAAS,2BAA2B,KAAG,CAAC,CAY7E;AAED,YAAY,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -8,8 +8,9 @@ export function throttleFn(fn, wait, options = {}) {
|
|
|
8
8
|
let timeout = null;
|
|
9
9
|
let lastCallTime = 0;
|
|
10
10
|
let lastArgs;
|
|
11
|
-
let lastThis;
|
|
12
11
|
let result;
|
|
12
|
+
// 用对象属性承载 this,避免 no-this-alias 规则(直接赋值 `var = this` 会被标记)
|
|
13
|
+
const lastThis = { current: undefined };
|
|
13
14
|
function throttled(...args) {
|
|
14
15
|
const now = Date.now();
|
|
15
16
|
// 如果是第一次调用且不允许 leading
|
|
@@ -18,7 +19,7 @@ export function throttleFn(fn, wait, options = {}) {
|
|
|
18
19
|
}
|
|
19
20
|
const remaining = wait - (now - lastCallTime);
|
|
20
21
|
lastArgs = args;
|
|
21
|
-
lastThis = this;
|
|
22
|
+
lastThis.current = this;
|
|
22
23
|
if (remaining <= 0 || remaining > wait) {
|
|
23
24
|
if (timeout) {
|
|
24
25
|
clearTimeout(timeout);
|
|
@@ -31,7 +32,7 @@ export function throttleFn(fn, wait, options = {}) {
|
|
|
31
32
|
timeout = setTimeout(() => {
|
|
32
33
|
lastCallTime = leading ? Date.now() : 0;
|
|
33
34
|
timeout = null;
|
|
34
|
-
result = fn.apply(lastThis, lastArgs);
|
|
35
|
+
result = fn.apply(lastThis.current, lastArgs);
|
|
35
36
|
}, remaining);
|
|
36
37
|
}
|
|
37
38
|
return result;
|
|
@@ -41,12 +42,12 @@ export function throttleFn(fn, wait, options = {}) {
|
|
|
41
42
|
// TC39 Stage 3 装饰器实现
|
|
42
43
|
export function throttle(wait, options) {
|
|
43
44
|
return function (originalMethod, context) {
|
|
44
|
-
|
|
45
|
+
const methodKey = context.name;
|
|
45
46
|
context.addInitializer(function () {
|
|
46
47
|
const self = this;
|
|
47
48
|
// 只 patch 原型上的原始方法,避免多层嵌套
|
|
48
49
|
const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(self), methodKey);
|
|
49
|
-
const method = descriptor?.value ?? originalMethod;
|
|
50
|
+
const method = (descriptor?.value ?? originalMethod);
|
|
50
51
|
const throttledMethod = throttleFn(method.bind(self), wait, options);
|
|
51
52
|
self[methodKey] = throttledMethod;
|
|
52
53
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ttl-cache.d.ts","sourceRoot":"","sources":["../../source/ttl-cache/ttl-cache.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,WAAW;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU;IACV,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"ttl-cache.d.ts","sourceRoot":"","sources":["../../source/ttl-cache/ttl-cache.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,aAAa;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,WAAW;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU;IACV,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,YAAY,CAAC,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,KAAK,CAAe;gBAEhB,OAAO,GAAE,eAAoB;IAiCzC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IA0B9C;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAuB/B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAiBzB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAahB;;OAEG;IACH,MAAM,IAAI,CAAC,EAAE;IAab;;OAEG;IACH,OAAO,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAa7B;;;;;OAKG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;IAoBxD;;OAEG;IACH,QAAQ,IAAI,aAAa;IAKzB;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;;OAGG;IACH,OAAO,IAAI,MAAM;IAmBjB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAc3B;;OAEG;IACH,OAAO,IAAI,IAAI;IAKf;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,aAAa;CAItB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taicode/common-base",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.13",
|
|
4
4
|
"author": "Alain",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"description": "",
|
|
@@ -24,12 +24,20 @@
|
|
|
24
24
|
"output"
|
|
25
25
|
],
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"
|
|
28
|
-
"
|
|
27
|
+
"@eslint/js": "^9.39.3",
|
|
28
|
+
"@yinxulai/eslint-plugin-peculiar": "^1.0.6",
|
|
29
|
+
"eslint": "^9.39.3",
|
|
30
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
31
|
+
"eslint-plugin-import": "^2.32.0",
|
|
32
|
+
"globals": "^16.5.0",
|
|
33
|
+
"mobx": "^6.15.0",
|
|
34
|
+
"typescript-eslint": "^8.56.1",
|
|
35
|
+
"vitest": "^3.2.4"
|
|
29
36
|
},
|
|
30
37
|
"scripts": {
|
|
31
38
|
"test": "vitest run",
|
|
32
39
|
"test:ci": "vitest run",
|
|
40
|
+
"lint": "eslint && tsc --noEmit",
|
|
33
41
|
"typecheck": "tsc --noEmit",
|
|
34
42
|
"build": "tsc -p tsconfig.json",
|
|
35
43
|
"dev": "tsc -p tsconfig.json --watch"
|