import { FunctionPromiseIdentity, PromiseFn, PromiseLikeReturnType } from '../types'; function createBatchedPromise(fn: Fn): FunctionPromiseIdentity { const batchedCalls: Record>> = {}; return async (...args: Parameters): Promise> => { const key = args.reduce((key, arg) => `${key}-${arg}`, ''); if (key in batchedCalls) { const result = await batchedCalls[key]; return result; } const resultPromise = fn(...args).finally(() => { delete batchedCalls[key]; }); batchedCalls[key] = resultPromise; return resultPromise; }; } export { createBatchedPromise };