@eclipse-glsp/protocol
Version:
The protocol definition for client-server communication in GLSP
61 lines • 2.35 kB
JavaScript
;
/********************************************************************************
* Copyright (c) 2026 EclipseSource and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
* with the GNU Classpath Exception which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
********************************************************************************/
Object.defineProperty(exports, "__esModule", { value: true });
exports.debounce = debounce;
/**
* Minimal lodash-compatible debounce. See {@link DebouncedFunc} for intentional differences from `lodash.debounce`.
*/
function debounce(func, wait, options = {}) {
var _a, _b;
let timeout;
let lastArgs;
let lastThis;
let hasPendingCall = false;
const leading = (_a = options.leading) !== null && _a !== void 0 ? _a : false;
const trailing = (_b = options.trailing) !== null && _b !== void 0 ? _b : true;
const debounced = function (...args) {
const shouldCallLeading = leading && timeout === undefined;
lastArgs = args;
lastThis = this;
hasPendingCall = true;
if (shouldCallLeading) {
func.apply(lastThis, lastArgs);
hasPendingCall = false;
}
if (timeout !== undefined) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
timeout = undefined;
if (trailing && hasPendingCall && lastArgs !== undefined) {
func.apply(lastThis, lastArgs);
hasPendingCall = false;
}
}, wait);
};
debounced.cancel = () => {
if (timeout !== undefined) {
clearTimeout(timeout);
timeout = undefined;
}
lastArgs = undefined;
lastThis = undefined;
hasPendingCall = false;
};
return debounced;
}
//# sourceMappingURL=function-util.js.map