UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

20 lines (19 loc) 801 B
import { _assert } from '../error/assert.js'; import { pTimeout } from '../promise/pTimeout.js'; import { _getMethodSignature } from './decorator.util.js'; // eslint-disable-next-line @typescript-eslint/naming-convention export function _Timeout(opt) { return (_target, key, descriptor) => { _assert(typeof descriptor.value === 'function', '@_Timeout can be applied only to methods'); if (!opt.timeout) return descriptor; const originalFn = descriptor.value; const keyStr = String(key); descriptor.value = async function (...args) { const ctx = this; opt.name ||= _getMethodSignature(ctx, keyStr); return await pTimeout(() => originalFn.apply(this, args), opt); }; return descriptor; }; }