{"version":3,"file":"performance.mjs","sources":["../../../../../../packages/components/resize-observer/src/performance.ts"],"sourcesContent":["import { NOOP, isClient } from '@lit-element/utils'\n\nexport const raf = isClient\n  ? requestAnimationFrame\n  : (cb: FrameRequestCallback) => {\n      setTimeout(cb, 16)\n    }\n\n/**\n * 将一个方法进行节流\n *\n * @param method 需要节流的方法，需自行绑定 this\n * @param interval 节流后的触发间隔，默认 16 ms (1 帧)\n *\n * @returns 节流后的方法\n */\nexport function throttle<T extends (...args: any[]) => any>(\n  method: T,\n  interval = 16\n): (...args: Parameters<T>) => void {\n  if (typeof method !== 'function') {\n    return NOOP\n  }\n  const invoke = (...args: Parameters<T>) => {\n    method(...args)\n  }\n\n  if (interval <= 0) {\n    return debounceMinor(invoke)\n  }\n\n  let lastCall = 0\n  let timer: ReturnType<typeof setTimeout>\n\n  return function (...args: Parameters<T>) {\n    const current = Date.now()\n    const elapsed = current - lastCall\n\n    clearTimeout(timer)\n\n    if (elapsed >= interval) {\n      lastCall = current\n      invoke(...args)\n    } else {\n      timer = setTimeout(() => {\n        lastCall = Date.now()\n        invoke(...args)\n      }, Math.max(0, interval - elapsed))\n    }\n  }\n}\n\n/**\n * 对给定的方法进行微任务级别的防抖\n *\n * @param method 需要防抖的方法，需自行绑定 this\n *\n * @returns 防抖后的方法\n */\nexport function debounceMinor<T extends (...args: any[]) => any>(method: T) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  let called = false\n  let lastArgs: Parameters<T>\n  let promise: Promise<Awaited<ReturnType<T>>>\n\n  return function (...args: Parameters<T>) {\n    lastArgs = args\n\n    if (!called) {\n      called = true\n      promise = Promise.resolve().then(() => {\n        called = false\n        promise = undefined!\n\n        return method(...lastArgs)\n      })\n    }\n\n    return promise\n  }\n}\n\nconst frameCallbacks = new Set<(...args: any[]) => any>()\nconst frameArgsMap = new WeakMap<any, any[]>()\n\nfunction flushFrameCallbacks() {\n  frameCallbacks.forEach((fn) => {\n    fn(...frameArgsMap.get(fn)!)\n  })\n  frameCallbacks.clear()\n}\n\n/**\n * 在下一渲染帧，仅执行一次传入的方法\n *\n * @param method 需要执行的方法\n * @param args 方法的额外参数，在方法调用前多次传入将会覆盖之前的参数\n */\nexport function nextFrameOnce<T extends (...args: any[]) => any>(\n  method: T,\n  ...args: any[]\n) {\n  if (typeof method !== 'function') {\n    return method\n  }\n\n  frameArgsMap.set(method, args)\n\n  if (frameCallbacks.has(method)) {\n    return\n  }\n\n  frameCallbacks.add(method)\n\n  if (frameCallbacks.size === 1) {\n    raf(flushFrameCallbacks)\n  }\n}\n"],"names":[],"mappings":"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"}