@tanstack/db
Version:
A reactive client store for building super fast apps on sync
39 lines (38 loc) • 1.12 kB
JavaScript
function throttleStrategy(options) {
const leading = options.leading === true || options.leading === void 0 && options.trailing !== true;
const trailing = options.trailing !== false;
let nextAllowedAt = Number.NEGATIVE_INFINITY;
let trailingTimeout;
let pendingCallback;
return {
_type: `throttle`,
options,
execute: (fn) => {
const now = Date.now();
if (leading && trailingTimeout === void 0 && now >= nextAllowedAt) {
nextAllowedAt = now + options.wait;
fn();
return;
}
if (!trailing) return false;
pendingCallback = fn;
if (trailingTimeout === void 0) {
const delay = leading ? Math.max(0, nextAllowedAt - now) : options.wait;
trailingTimeout = setTimeout(() => {
trailingTimeout = void 0;
nextAllowedAt = Date.now() + options.wait;
const callback = pendingCallback;
pendingCallback = void 0;
callback?.();
}, delay);
}
return;
},
cleanup: () => {
}
};
}
export {
throttleStrategy
};
//# sourceMappingURL=throttleStrategy.js.map