perf: speed up isAsyncFunction() helper
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 16 Oct 2024 15:50:36 +0000 (17:50 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Wed, 16 Oct 2024 15:50:36 +0000 (17:50 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/utils.ts

index 0e1266a15d6f7ee29d689c6c9a1fa2a2930745c4..3e22b8c19193fe4de39a6d3c795cf0af72134ce1 100644 (file)
@@ -141,6 +141,8 @@ export const isKillBehavior = <KB extends KillBehavior>(
   return value === killBehavior
 }
 
+type AsyncFunctionType<A extends unknown[], R> = (...args: A) => PromiseLike<R>
+
 /**
  * Detects whether the given value is an asynchronous function or not.
  * @param fn - Unknown value.
@@ -149,8 +151,9 @@ export const isKillBehavior = <KB extends KillBehavior>(
  */
 export const isAsyncFunction = (
   fn: unknown
-): fn is (...args: unknown[]) => Promise<unknown> => {
-  return typeof fn === 'function' && fn.constructor.name === 'AsyncFunction'
+): fn is AsyncFunctionType<unknown[], unknown> => {
+  // eslint-disable-next-line @typescript-eslint/no-empty-function
+  return fn?.constructor === (async () => {}).constructor
 }
 
 /**