UNPKG

@oxog/delay

Version:

A comprehensive, zero-dependency delay/timeout utility library with advanced timing features

57 lines 1.85 kB
import { parseTimeString, parseTimeUntil } from '../utils/time.js'; import { createBasicDelay } from './delay.js'; export function forDelay(timeString, options) { const ms = parseTimeString(timeString); return createBasicDelay(ms, options); } export function untilDelay(target, options) { if (typeof target === 'function') { return conditionalDelay(target, options); } if (target instanceof Date) { const ms = Math.max(0, target.getTime() - Date.now()); return createBasicDelay(ms, options); } if (typeof target === 'string') { const ms = parseTimeUntil(target); return createBasicDelay(ms, options); } throw new Error('Invalid target type for until delay'); } export function whileDelay(predicate, options) { return conditionalDelay(() => !predicate(), options); } async function conditionalDelay(condition, options = {}) { const checkInterval = 50; // Check every 50ms const { signal } = options; return new Promise((resolve, reject) => { if (signal?.aborted) { reject(new Error('Delay was aborted')); return; } const check = () => { if (signal?.aborted) { reject(new Error('Delay was cancelled')); return; } try { if (condition()) { resolve(); return; } } catch (error) { reject(error); return; } setTimeout(check, checkInterval); }; const handleAbort = () => { reject(new Error('Delay was cancelled')); }; signal?.addEventListener('abort', handleAbort); // Start checking check(); }); } //# sourceMappingURL=parser.js.map