Comment by hdjrudni
If it's what I'm thinking, that one isn't too bad. I wrote it awhile back:
export async function promiseAll<T extends Record<string, Promise<any>>>(promises: T): Promise<{ [K in keyof T]: Awaited<T[K]> }> {
const keys = Object.keys(promises) as Array<keyof T>;
const result = await Promise.all(keys.map(key => promises[key]));
return Object.fromEntries(result.map((value, i) => [keys[i], value])) as { [K in keyof T]: Awaited<T[K]> };