advanced-js-kit
Version:
Modern TypeScript utility library with tree-shaking support - Array, String, Number, Network, Sleep, and JWT utilities for JavaScript and TypeScript projects
87 lines (86 loc) • 3.04 kB
JavaScript
// src/universal/sleep/index.ts
var sleep = (params) => {
return new Promise((resolve, reject) => {
let delayMs = 0;
try {
if (!params || Object.keys(params).length === 0) {
throw new Error("Sleep parameters cannot be empty");
}
if (params.until?.unixTimestamp) {
const now = Date.now();
const targetTime = params.until.unixTimestamp * 1e3;
delayMs = Math.max(0, targetTime - now);
if (delayMs === 0) {
resolve();
return;
}
} else if (params.random) {
if (params.random.milliseconds) {
const { min, max } = params.random.milliseconds;
if (min < 0 || max < 0 || min > max) {
throw new Error("Invalid random milliseconds range");
}
delayMs = Math.random() * (max - min) + min;
} else if (params.random.seconds) {
const { min, max } = params.random.seconds;
if (min < 0 || max < 0 || min > max) {
throw new Error("Invalid random seconds range");
}
delayMs = (Math.random() * (max - min) + min) * 1e3;
} else if (params.random.minutes) {
const { min, max } = params.random.minutes;
if (min < 0 || max < 0 || min > max) {
throw new Error("Invalid random minutes range");
}
delayMs = (Math.random() * (max - min) + min) * 60 * 1e3;
} else {
throw new Error("Random delay type must be specified (milliseconds, seconds, or minutes)");
}
} else {
if (params.milliseconds !== void 0) {
if (params.milliseconds < 0) {
throw new Error("Milliseconds cannot be negative");
}
delayMs += params.milliseconds;
}
if (params.seconds !== void 0) {
if (params.seconds < 0) {
throw new Error("Seconds cannot be negative");
}
delayMs += params.seconds * 1e3;
}
if (params.minutes !== void 0) {
if (params.minutes < 0) {
throw new Error("Minutes cannot be negative");
}
delayMs += params.minutes * 60 * 1e3;
}
if (delayMs === 0 && !params.milliseconds && !params.seconds && !params.minutes) {
throw new Error("At least one delay parameter must be specified");
}
}
const MAX_DELAY = 2147483647;
if (delayMs > MAX_DELAY) {
throw new Error(`Delay too large. Maximum delay is ${MAX_DELAY}ms`);
}
setTimeout(resolve, Math.floor(delayMs));
} catch (error) {
reject(error);
}
});
};
var sleepMs = (ms) => {
return sleep({ milliseconds: ms });
};
var sleepSeconds = (seconds) => {
return sleep({ seconds });
};
var sleepMinutes = (minutes) => {
return sleep({ minutes });
};
var sleepUntil = (unixTimestamp) => {
return sleep({ until: { unixTimestamp } });
};
export { sleep, sleepMinutes, sleepMs, sleepSeconds, sleepUntil };
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map