UNPKG

@oxog/delay

Version:

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

62 lines 2.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.forDelay = forDelay; exports.untilDelay = untilDelay; exports.whileDelay = whileDelay; const time_js_1 = require("../utils/time.js"); const delay_js_1 = require("./delay.js"); function forDelay(timeString, options) { const ms = (0, time_js_1.parseTimeString)(timeString); return (0, delay_js_1.createBasicDelay)(ms, options); } 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 (0, delay_js_1.createBasicDelay)(ms, options); } if (typeof target === 'string') { const ms = (0, time_js_1.parseTimeUntil)(target); return (0, delay_js_1.createBasicDelay)(ms, options); } throw new Error('Invalid target type for until delay'); } 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