{"version":3,"file":"reFunction.cjs","sources":["../../src/utils/reFunction.ts"],"sourcesContent":["import type { SubType } from '@bemedev/app-ts/lib/types';\n\ntype Fn<P extends any[] = any, R = any> = (...arg: P) => R;\ntype KeysFn<T extends object = object> = keyof SubType<T, Fn>;\n\nfunction _reFunction<P extends any[] = any[], R = any>(\n  fn: Fn<P, R>,\n  bind: any,\n) {\n  return (...args: P) => fn.bind(bind)(...args);\n}\n\nexport function reFunction<\n  T extends object = object,\n  FnKey extends KeysFn<T> = KeysFn<T>,\n>(object: T, fn: FnKey) {\n  const _fn = object[fn];\n  type Pm = T[FnKey] extends (...args: infer P) => any ? P : any[];\n  type Re = T[FnKey] extends (...args: any) => infer R ? R : any;\n  return _reFunction<Pm, Re>(_fn as any, object);\n}\n"],"names":[],"mappings":";;AAKA,SAAS,WAAW,CAClB,EAAY,EACZ,IAAS,EAAA;AAET,IAAA,OAAO,CAAC,GAAG,IAAO,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAC/C;AAEgB,SAAA,UAAU,CAGxB,MAAS,EAAE,EAAS,EAAA;AACpB,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;AAGtB,IAAA,OAAO,WAAW,CAAS,GAAU,EAAE,MAAM,CAAC;AAChD;;;;"}