27 lines
625 B
JavaScript
Raw Permalink Normal View History

2026-05-31 13:21:13 +02:00
import vm from 'node:vm';
export default function functionTimeout(function_, {timeout} = {}) {
const script = new vm.Script('returnValue = function_()');
const wrappedFunction = (...arguments_) => {
const context = {
function_: () => function_(...arguments_),
};
script.runInNewContext(context, {timeout});
return context.returnValue;
};
Object.defineProperty(wrappedFunction, 'name', {
value: `functionTimeout(${function_.name || '<anonymous>'})`,
configurable: true,
});
return wrappedFunction;
}
export function isTimeoutError(error) {
return error?.code === 'ERR_SCRIPT_EXECUTION_TIMEOUT';
}