@oxog/delay
Version:
A comprehensive, zero-dependency delay/timeout utility library with advanced timing features
57 lines • 1.85 kB
JavaScript
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