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

index 2da9b1cb0cd784b27deeedd7d21f96a5774e0050..56b528a60709ddcd136c4488932bb7d9a4d0132d 100644 (file)
@@ -208,14 +208,17 @@ export const clone = <T>(object: T): T => {
   return structuredClone<T>(object)
 }
 
+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.
  * @returns `true` if `fn` was an asynchronous function, otherwise `false`.
  * @internal
  */
-export const isAsyncFunction = (fn: unknown): fn is (...args: unknown[]) => Promise<unknown> => {
-  return is(Function, fn) && fn.constructor.name === 'AsyncFunction'
+export const isAsyncFunction = (fn: unknown): fn is AsyncFunctionType<unknown[], unknown> => {
+  // eslint-disable-next-line @typescript-eslint/no-empty-function
+  return fn?.constructor === (async () => {}).constructor
 }
 
 export const isObject = (value: unknown): value is object => {