-
Notifications
You must be signed in to change notification settings - Fork 6
/
index.ts
33 lines (29 loc) · 929 Bytes
/
index.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
32
33
type FlatryFn<Result extends unknown> = () => Result;
function flatryFunction<Result>(fn: FlatryFn<Result>) {
try {
return [null, fn()] as const;
} catch (err: unknown) {
return [err] as const;
}
}
async function flatryPromise<Error, Result>(promise: PromiseLike<Result>) {
try {
const value = await promise;
return [null, value] as const;
} catch (err) {
return [err] as const;
}
}
export default function flatry<T>(
promise: PromiseLike<T>
): Promise<[unknown, never] | [null, T]>;
export default function flatry<T>(fn: () => T): [unknown, never] | [null, T];
export default function flatry(functionOrPromise: any): any {
if (typeof functionOrPromise.then === "function") {
return flatryPromise(functionOrPromise);
}
if (typeof functionOrPromise === "function") {
return flatryFunction(functionOrPromise);
}
throw new Error("Argument must be a function or Promise");
}