All files / utils prepareData.ts

100% Statements 7/7
100% Branches 2/2
100% Functions 5/5
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29                            1x   2x 2x 1x       1x 2x 2x        
import { isPromiseLike } from './isPromiseLike'
 
/**
 * 准备数据。
 *
 * @param getter 数据源
 */
export function prepareData<T extends Record<string, () => any>>(
  getter: T,
): Promise<
  {
    [K in keyof T]: Awaited<ReturnType<T[K]>>
  }
> {
  return Promise.all<[string, any]>(
    Object.keys(getter).map(key => {
      const v = getter[key]()
      return isPromiseLike(v)
        ? v.then((value: any) => [key, value])
        : ([key, v] as any)
    }),
  ).then<any>(list =>
    list.reduce<any>((res, item) => {
      res[item[0]] = item[1]
      return res
    }, {}),
  )
}