@oxog/delay
Version:
A comprehensive, zero-dependency delay/timeout utility library with advanced timing features
175 lines • 9.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDebugPlugin = exports.createMetricsPlugin = exports.createLoggingPlugin = exports.PluginManager = exports.getEnvironmentCapabilities = exports.waitForWindowLoad = exports.waitForDOMReady = exports.idle = exports.nextFrame = exports.getHighResolutionTime = exports.convertToMs = exports.parseTimeUntil = exports.parseTimeString = exports.calculateBackoffDelay = exports.randomBetween = exports.addJitter = exports.debounce = exports.throttle = exports.preciseDelay = exports.createBatchScheduler = exports.createRepeatDelay = exports.retryDelay = exports.createCancellableDelay = exports.createBasicDelay = exports.DelayErrorCode = exports.DelayError = exports.delay = void 0;
const delay_js_1 = require("./core/delay.js");
const cancellable_js_1 = require("./core/cancellable.js");
const parser_js_1 = require("./core/parser.js");
const retry_js_1 = require("./core/retry.js");
const repeat_js_1 = require("./core/repeat.js");
const scheduler_js_1 = require("./core/scheduler.js");
const random_js_1 = require("./utils/random.js");
const throttle_debounce_js_1 = require("./utils/throttle-debounce.js");
const promise_js_1 = require("./utils/promise.js");
const browser_js_1 = require("./utils/browser.js");
const plugin_manager_js_1 = require("./plugins/plugin-manager.js");
class DelayImplementation {
constructor() {
this.pluginManager = new plugin_manager_js_1.PluginManager();
this.pluginManager.setDelayInstance(this);
}
// Main delay function - will be added as property
delay(ms, options) {
return (0, delay_js_1.createBasicDelay)(ms, options);
}
// Time unit methods
ms(milliseconds, options) {
return (0, delay_js_1.msDelay)(milliseconds, options);
}
seconds(seconds, options) {
return (0, delay_js_1.secondsDelay)(seconds, options);
}
minutes(minutes, options) {
return (0, delay_js_1.minutesDelay)(minutes, options);
}
hours(hours, options) {
return (0, delay_js_1.hoursDelay)(hours, options);
}
days(days, options) {
return (0, delay_js_1.daysDelay)(days, options);
}
// Human-friendly syntax
for(timeString, options) {
return (0, parser_js_1.forDelay)(timeString, options);
}
until(target, options) {
return (0, parser_js_1.untilDelay)(target, options);
}
while(predicate, options) {
return (0, parser_js_1.whileDelay)(predicate, options);
}
// Cancellable delays
cancellable(ms, options) {
return (0, cancellable_js_1.createCancellableDelay)(ms, options);
}
// Retry mechanism
retry(fn, options) {
return (0, retry_js_1.retryDelay)(fn, options);
}
// Repeating delays
repeat(fn, interval) {
return (0, repeat_js_1.createRepeatDelay)(fn, interval);
}
// Randomization
random(ms, options = {}) {
const { jitter = 0.1 } = options;
const randomMs = (0, random_js_1.addJitter)(ms, jitter);
return (0, delay_js_1.createBasicDelay)(randomMs);
}
between(min, max) {
const randomMs = (0, random_js_1.randomBetween)(min, max);
return (0, delay_js_1.createBasicDelay)(randomMs);
}
// Performance features
precise(ms) {
return (0, scheduler_js_1.preciseDelay)(ms);
}
batch(options) {
return (0, scheduler_js_1.createBatchScheduler)(options);
}
// Promise utilities
race(promises, timeout, timeoutError) {
return (0, promise_js_1.raceWithTimeout)(promises, timeout, timeoutError);
}
timeout(ms, error) {
return (0, promise_js_1.createTimeoutPromise)(ms, error);
}
minimum(promise, ms) {
return (0, promise_js_1.minimumDelay)(promise, ms);
}
// Utility methods
throttle(fn, ms, options) {
return (0, throttle_debounce_js_1.throttle)(fn, ms, options);
}
debounce(fn, ms, options) {
return (0, throttle_debounce_js_1.debounce)(fn, ms, options);
}
nextFrame() {
return (0, browser_js_1.nextFrame)();
}
idle(options) {
return (0, browser_js_1.idle)(options);
}
// Plugin system
use(plugin) {
this.pluginManager.register(plugin);
}
}
// Create a function that can be called directly but also has methods
function createDelayInstance() {
const instance = new DelayImplementation();
// Create a callable function
const delay = (ms, options) => {
return instance.delay(ms, options);
};
// Copy all methods to the function, excluding the internal delay method
const propertiesToCopy = Object.getOwnPropertyNames(Object.getPrototypeOf(instance))
.filter(name => name !== 'constructor' && name !== 'delay');
propertiesToCopy.forEach(name => {
const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), name);
if (descriptor && typeof descriptor.value === 'function') {
delay[name] = descriptor.value.bind(instance);
}
});
// Also copy any instance properties
Object.keys(instance).forEach(key => {
if (key !== 'pluginManager') {
delay[key] = instance[key];
}
});
return delay;
}
// Create the default instance
const delay = createDelayInstance();
exports.delay = delay;
// Export both the instance and types
exports.default = delay;
// Export error types
var index_js_1 = require("./types/index.js");
Object.defineProperty(exports, "DelayError", { enumerable: true, get: function () { return index_js_1.DelayError; } });
Object.defineProperty(exports, "DelayErrorCode", { enumerable: true, get: function () { return index_js_1.DelayErrorCode; } });
// Export utility functions for advanced use cases
var delay_js_2 = require("./core/delay.js");
Object.defineProperty(exports, "createBasicDelay", { enumerable: true, get: function () { return delay_js_2.createBasicDelay; } });
var cancellable_js_2 = require("./core/cancellable.js");
Object.defineProperty(exports, "createCancellableDelay", { enumerable: true, get: function () { return cancellable_js_2.createCancellableDelay; } });
var retry_js_2 = require("./core/retry.js");
Object.defineProperty(exports, "retryDelay", { enumerable: true, get: function () { return retry_js_2.retryDelay; } });
var repeat_js_2 = require("./core/repeat.js");
Object.defineProperty(exports, "createRepeatDelay", { enumerable: true, get: function () { return repeat_js_2.createRepeatDelay; } });
var scheduler_js_2 = require("./core/scheduler.js");
Object.defineProperty(exports, "createBatchScheduler", { enumerable: true, get: function () { return scheduler_js_2.createBatchScheduler; } });
Object.defineProperty(exports, "preciseDelay", { enumerable: true, get: function () { return scheduler_js_2.preciseDelay; } });
var throttle_debounce_js_2 = require("./utils/throttle-debounce.js");
Object.defineProperty(exports, "throttle", { enumerable: true, get: function () { return throttle_debounce_js_2.throttle; } });
Object.defineProperty(exports, "debounce", { enumerable: true, get: function () { return throttle_debounce_js_2.debounce; } });
var random_js_2 = require("./utils/random.js");
Object.defineProperty(exports, "addJitter", { enumerable: true, get: function () { return random_js_2.addJitter; } });
Object.defineProperty(exports, "randomBetween", { enumerable: true, get: function () { return random_js_2.randomBetween; } });
Object.defineProperty(exports, "calculateBackoffDelay", { enumerable: true, get: function () { return random_js_2.calculateBackoffDelay; } });
var time_js_1 = require("./utils/time.js");
Object.defineProperty(exports, "parseTimeString", { enumerable: true, get: function () { return time_js_1.parseTimeString; } });
Object.defineProperty(exports, "parseTimeUntil", { enumerable: true, get: function () { return time_js_1.parseTimeUntil; } });
Object.defineProperty(exports, "convertToMs", { enumerable: true, get: function () { return time_js_1.convertToMs; } });
Object.defineProperty(exports, "getHighResolutionTime", { enumerable: true, get: function () { return time_js_1.getHighResolutionTime; } });
var browser_js_2 = require("./utils/browser.js");
Object.defineProperty(exports, "nextFrame", { enumerable: true, get: function () { return browser_js_2.nextFrame; } });
Object.defineProperty(exports, "idle", { enumerable: true, get: function () { return browser_js_2.idle; } });
Object.defineProperty(exports, "waitForDOMReady", { enumerable: true, get: function () { return browser_js_2.waitForDOMReady; } });
Object.defineProperty(exports, "waitForWindowLoad", { enumerable: true, get: function () { return browser_js_2.waitForWindowLoad; } });
Object.defineProperty(exports, "getEnvironmentCapabilities", { enumerable: true, get: function () { return browser_js_2.getEnvironmentCapabilities; } });
var plugin_manager_js_2 = require("./plugins/plugin-manager.js");
Object.defineProperty(exports, "PluginManager", { enumerable: true, get: function () { return plugin_manager_js_2.PluginManager; } });
Object.defineProperty(exports, "createLoggingPlugin", { enumerable: true, get: function () { return plugin_manager_js_2.createLoggingPlugin; } });
Object.defineProperty(exports, "createMetricsPlugin", { enumerable: true, get: function () { return plugin_manager_js_2.createMetricsPlugin; } });
Object.defineProperty(exports, "createDebugPlugin", { enumerable: true, get: function () { return plugin_manager_js_2.createDebugPlugin; } });
//# sourceMappingURL=index.js.map