UNPKG

@zkochan/pnpm

Version:

Fast, disk space efficient package manager

62 lines (51 loc) 1.14 kB
'use strict'; const createAbortError = () => { const error = new Error('Delay aborted'); error.name = 'AbortError'; return error; }; const createDelay = willResolve => (ms, {value, signal} = {}) => { if (signal && signal.aborted) { return Promise.reject(createAbortError()); } let timeoutId; let settle; let rejectFn; const signalListener = () => { clearTimeout(timeoutId); rejectFn(createAbortError()); }; const cleanup = () => { if (signal) { signal.removeEventListener('abort', signalListener); } }; const delayPromise = new Promise((resolve, reject) => { settle = () => { cleanup(); if (willResolve) { resolve(value); } else { reject(value); } }; rejectFn = reject; timeoutId = setTimeout(settle, ms); }); if (signal) { signal.addEventListener('abort', signalListener, {once: true}); } delayPromise.clear = () => { cleanup(); if (timeoutId) { clearTimeout(timeoutId); timeoutId = null; settle(); } }; return delayPromise; }; const delay = createDelay(true); delay.reject = createDelay(false); module.exports = delay; module.exports.default = delay;