Skip to content

Commit db58ad4

Browse files
committed
feat(util): adds an util to resolve all promises contained within an object
1 parent c87dfcb commit db58ad4

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

Diff for: packages/util/src/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ export * from './logging';
1313
export * from './RunnableModule';
1414
export * from './opaqueTypes';
1515
export * from './environment';
16+
17+
export { PromiseOrValue, resolveObjectValues } from './util';

Diff for: packages/util/src/util.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export type PromiseOrValue<T> = Promise<T> | T;
2+
3+
export const resolveObjectValues = async <T>(obj: { [k: string]: PromiseOrValue<T> }): Promise<{ [k: string]: T }> =>
4+
Object.fromEntries(
5+
await Promise.all(
6+
Object.entries(obj).map(([key, promise]) => Promise.resolve(promise).then((value) => [key, value]))
7+
)
8+
);

Diff for: packages/util/test/util.test.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { resolveObjectValues } from '../src';
2+
3+
describe('util', () => {
4+
describe('resolveObjectValues', () => {
5+
it('resolves all object values which are promises', async () => {
6+
const result = await resolveObjectValues({
7+
first: 1,
8+
second: Promise.resolve(2),
9+
third: new Promise<number>((resolve) => setTimeout(() => resolve(3), 10))
10+
});
11+
12+
expect(result).toEqual({ first: 1, second: 2, third: 3 });
13+
});
14+
});
15+
});

0 commit comments

Comments
 (0)