// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

export async function awaitObject<
  Result extends { [key: string]: unknown }
>(settings: {
  [key in keyof Result]: Promise<Result[key]>;
}): Promise<Result> {
  const keys = Object.keys(settings);
  const promises = new Array<Promise<unknown>>();
  for (const key of keys) {
    promises.push(settings[key as keyof Result] as Promise<unknown>);
  }

  const values = await Promise.all(promises);

  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  const result: any = {};
  for (const [i, key] of keys.entries()) {
    result[key] = values[i];
  }
  return result;
}