/ src / helpers / patch / saveOriginalMethod.ts
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  };