export interface Options { | |
/** | |
Skip modifying [non-configurable properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor#Description) instead of throwing an error. | |
@default false | |
*/ | |
readonly ignoreNonConfigurable?: boolean; | |
} | |
/** | |
Modifies the `to` function to mimic the `from` function. Returns the `to` function. | |
`name`, `displayName`, and any other properties of `from` are copied. The `length` property is not copied. Prototype, class, and inherited properties are copied. | |
`to.toString()` will return the same as `from.toString()` but prepended with a `Wrapped with to()` comment. | |
@param to - Mimicking function. | |
@param from - Function to mimic. | |
@returns The modified `to` function. | |
@example | |
``` | |
import mimicFunction from 'mimic-fn'; | |
function foo() {} | |
foo.unicorn = 'π¦'; | |
function wrapper() { | |
return foo(); | |
} | |
console.log(wrapper.name); | |
//=> 'wrapper' | |
mimicFunction(wrapper, foo); | |
console.log(wrapper.name); | |
//=> 'foo' | |
console.log(wrapper.unicorn); | |
//=> 'π¦' | |
``` | |
*/ | |
export default function mimicFunction< | |
ArgumentsType extends unknown[], | |
ReturnType, | |
FunctionType extends (...arguments: ArgumentsType) => ReturnType | |
>( | |
to: (...arguments: ArgumentsType) => ReturnType, | |
from: FunctionType, | |
options?: Options, | |
): FunctionType; | |