diff --git a/src/delegate/delegate.spec.ts b/src/delegate/delegate.spec.ts index 21f3dfe..8deabdc 100644 --- a/src/delegate/delegate.spec.ts +++ b/src/delegate/delegate.spec.ts @@ -95,6 +95,30 @@ describe('delegate', () => { expect(counter).toEqual(2); }); + it('should delegate method with same key invocation - default key serialization - many args', async () => { + let counter = 0; + + class T { + @delegate() + async foo(...args: number[]): Promise { + counter += 1; + await sleep(20); + + return Promise.resolve(args.reduce((a, b) => a + b)); + } + } + + const t = new T(); + + const res = await Promise.all([ + t.foo(1, 1, 1, 1), + t.foo(1, 1, 1, 2), + t.foo(1, 1, 1, 1), + ]); + expect(res).toEqual([4, 5, 4]); + expect(counter).toEqual(2); + }); + it('should delegate method with same key invocation - custom serialization', async () => { let counter = 0; diff --git a/src/delegate/delegatify.ts b/src/delegate/delegatify.ts index 4e4fdda..26f0788 100644 --- a/src/delegate/delegatify.ts +++ b/src/delegate/delegatify.ts @@ -5,7 +5,7 @@ export function delegatify( keyResolver?: (...args: A) => string, ): AsyncMethod { const delegatedKeysMap = new Map>(); - const keyGenerator: (...args: any[]) => string = keyResolver ?? JSON.stringify; + const keyGenerator: (...args: any[]) => string = keyResolver ?? ((...args) => JSON.stringify(args)); return function (...args: A): Promise { const key = keyGenerator(...args);