@techmely/utils
Version:
Collection of helpful JavaScript / TypeScript utils
102 lines (96 loc) • 2.81 kB
JavaScript
/*!
* @techmely/utils
* Copyright(c) 2021-2024 Techmely <techmely.creation@gmail.com>
* MIT Licensed
*/
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/p.delay.ts
var p_delay_exports = {};
__export(p_delay_exports, {
clearDelay: () => clearDelay,
createDelay: () => createDelay,
delay: () => delay,
rangeDelay: () => rangeDelay
});
module.exports = __toCommonJS(p_delay_exports);
// src/generate.ts
function getRandomInt(min, max) {
const _min = Math.ceil(min);
const _max = Math.floor(max);
return Math.floor(Math.random() * (_max - _min) + _min);
}
// src/p.delay.ts
var createAbortError = () => {
const error = new Error("Delay aborted");
error.name = "AbortError";
return error;
};
var clearMethods = /* @__PURE__ */ new WeakMap();
function delay(milliseconds, options) {
return createDelay(milliseconds, options);
}
function createDelay(milliseconds, { value, signal } = {}) {
if (signal?.aborted) {
return Promise.reject(createAbortError());
}
let timeoutId;
let settle;
let rejectFunction;
const signalListener = () => {
clearTimeout(timeoutId);
rejectFunction(createAbortError());
};
const cleanup = () => {
if (signal) {
signal.removeEventListener("abort", signalListener);
}
};
const delayPromise = new Promise((resolve, reject) => {
settle = () => {
cleanup();
if (value)
resolve(value);
};
rejectFunction = reject;
timeoutId = setTimeout(settle, milliseconds);
});
if (signal) {
signal.addEventListener("abort", signalListener, { once: true });
}
clearMethods.set(delayPromise, () => {
clearTimeout(timeoutId);
timeoutId = void 0;
settle();
});
return delayPromise;
}
async function rangeDelay(minimum, maximum, options = {}) {
return delay(getRandomInt(minimum, maximum), options);
}
function clearDelay(promise) {
clearMethods.get(promise)?.();
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
clearDelay,
createDelay,
delay,
rangeDelay
});