export type Options = {
	/**
	The time in milliseconds to wait before timing out.

	Keep in mind that execution time can vary between different hardware and Node.js versions. Set a generous timeout to avoid flakiness.
	*/
	readonly timeout?: number;
};

/**
Returns a wrapped version of the given function that throws a timeout error if the execution takes longer than the given timeout.

@example
```
import functionTimeout, {isTimeoutError} from 'function-timeout';

const generateNumbers = count => {
	// Imagine this takes a long time.
};

const generateNumbersWithTimeout = functionTimeout(generateNumbers, {timeout: 100});

try {
	console.log(generateNumbersWithTimeout(500));
} catch (error) {
	if (isTimeoutError(error)) {
		console.error('Timed out');
	} else {
		throw error;
	}
}
```
*/
export default function functionTimeout<T extends Function>(function_: T, options?: Options): T; // eslint-disable-line @typescript-eslint/ban-types

/**
Returns a boolean for whether the given error is a timeout error.
*/
export function isTimeoutError(error: unknown): boolean;