worker: fix async typing

Signed-off-by: Varun Patil <radialapps@gmail.com>
monorepo
Varun Patil 2023-10-30 16:50:49 -07:00
parent 8df9c3034d
commit e1c89f9cb0
1 changed files with 18 additions and 2 deletions

View File

@ -16,6 +16,22 @@ type CommResult = {
reject?: string;
};
/**
* Map of function names to functions.
*/
type FunctionMap = { [name: string]: Function };
/**
* Utility type to convert all methods in an object to async.
*/
type Async<T extends FunctionMap> = {
[K in keyof T]: T[K] extends (...args: infer A) => Promise<infer R>
? (...args: A) => Promise<R>
: T[K] extends (...args: infer A) => infer R
? (...args: A) => Promise<R>
: T[K];
};
/**
* Export methods from a worker to the main thread.
*
@ -34,7 +50,7 @@ type CommResult = {
* inline: () => 'bar',
* });
*/
export function exportWorker<T extends { [name: string]: Function }>(handlers: T): T {
export function exportWorker<T extends FunctionMap>(handlers: T): Async<T> {
self.onmessage = async ({ data }: { data: CommRequest }) => {
try {
// Get handler from registrations
@ -55,7 +71,7 @@ export function exportWorker<T extends { [name: string]: Function }>(handlers: T
}
};
return null as unknown as T;
return null as unknown as Async<T>;
}
/**