UNPKG

@oxog/delay

Version:

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

175 lines 9.56 kB
"use strict"; 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