saveOriginalMethod.ts
1 import type { ConditionalKeys } from 'type-fest'; 2 3 import type { Logger } from '@/utils/logger'; 4 5 export const saveOriginalMethod = < 6 Obj extends object, 7 Key extends ConditionalKeys<NoInfer<Obj>, (...args: any[]) => any>, 8 >( 9 logger: Logger, 10 obj: Obj, 11 key: Key, 12 origSym: Extract<ConditionalKeys<NoInfer<Required<Obj>>, NoInfer<Obj[Key]>>, symbol>, 13 ): Obj[Key] => { 14 { 15 const orig = obj[origSym]; 16 17 if (typeof orig === 'function') { 18 logger.debug(`reverting non-reverted \`${key}\` patch`); 19 obj[key] = orig; 20 delete obj[origSym]; 21 } 22 } 23 24 return (obj[origSym] = obj[key] as unknown as (typeof obj)[typeof origSym]); 25 };