1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /**
- * Debounce a function to delay invoking until wait (ms) have elapsed since the last invocation.
- * @param {function(...*): *} fn The function to be debounced.
- * @param {number} wait Milliseconds to wait before invoking again.
- * @return {function(...*): void} The debounced function.
- */
- function debounce(fn, wait) {
- /**
- * A cached setTimeout handler.
- * @type {number | undefined}
- */
- let timer;
- /**
- * @returns {void}
- */
- function debounced() {
- const context = this;
- const args = arguments;
- clearTimeout(timer);
- timer = setTimeout(function () {
- return fn.apply(context, args);
- }, wait);
- }
- return debounced;
- }
- /**
- * Prettify a filename from error stacks into the desired format.
- * @param {string} filename The filename to be formatted.
- * @returns {string} The formatted filename.
- */
- function formatFilename(filename) {
- // Strip away protocol and domain for compiled files
- const htmlMatch = /^https?:\/\/(.*)\/(.*)/.exec(filename);
- if (htmlMatch && htmlMatch[1] && htmlMatch[2]) {
- return htmlMatch[2];
- }
- // Strip everything before the first directory for source files
- const sourceMatch = /\/.*?([^./]+[/|\\].*)$/.exec(filename);
- if (sourceMatch && sourceMatch[1]) {
- return sourceMatch[1].replace(/\?$/, '');
- }
- // Unknown filename type, use it as is
- return filename;
- }
- /**
- * Remove all children of an element.
- * @param {HTMLElement} element A valid HTML element.
- * @param {number} [skip] Number of elements to skip removing.
- * @returns {void}
- */
- function removeAllChildren(element, skip) {
- /** @type {Node[]} */
- const childList = Array.prototype.slice.call(
- element.childNodes,
- typeof skip !== 'undefined' ? skip : 0
- );
- for (let i = 0; i < childList.length; i += 1) {
- element.removeChild(childList[i]);
- }
- }
- module.exports = {
- debounce: debounce,
- formatFilename: formatFilename,
- removeAllChildren: removeAllChildren,
- };
|