-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
MaybePromise.ts
31 lines (28 loc) · 926 Bytes
/
MaybePromise.ts
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
30
31
import { isPromise } from './isPromise.js'
/**
* `T | Promise<T>`
*/
export type MaybePromise<T> = T | Promise<T>
/**
* Transforms the value within the promise.
*
* @return a new promise with the transformed result.
*/
export function transformMaybePromise<T, R>(value: Promise<T>, transformer: (value: T) => R): Promise<R>
/**
* Transforms the value, or if the value is a promise,
* transform the resolved value of the promise.
*
* @return the transformed result,
* or if the value is a promise, a new promse with the transformed result.
*/
export function transformMaybePromise<T, R>(
value: T,
transformer: (value: T) => R
): T extends Promise<any> ? Promise<R> : R
export function transformMaybePromise<T, R>(value: MaybePromise<T>, transformer: (value: T) => R) {
return isPromise(value) ? value.then(transformer) : transformer(value)
}
export const MaybePromise = {
transform: transformMaybePromise
}