UNPKG

@esmj/task

Version:

Tiny task management library which divide long task. Improve core web vitals and browser responsiveness.

2 lines (1 loc) 1.53 kB
var d=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var _=(e,n)=>{for(var t in n)d(e,t,{get:n[t],enumerable:!0})},g=(e,n,t,l)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of c(n))!m.call(e,o)&&o!==t&&d(e,o,{get:()=>n[o],enumerable:!(l=s(n,o))||l.enumerable});return e};var T=e=>g(d({},"__esModule",{value:!0}),e);var E={};_(E,{autoYield:()=>Y,autoYieldReset:()=>x,autoYieldStartPoint:()=>a,forceYield:()=>u,nextFrameYield:()=>b,setConfig:()=>w});module.exports=T(E);var i={},r={autoEnable:!0,autoShareContext:!1},p=45,h=0,y=16;function b(){return typeof requestAnimationFrame>"u"?u(y):new Promise(e=>{requestAnimationFrame(()=>{u(0).then(e)})})}function u(e){let n=f();return typeof n.scheduler?.yield=="function"&&e===void 0?(a(),n.scheduler.yield()):new Promise(t=>{setTimeout(()=>{a(),t(void 0)},e??h)})}async function Y(){if(!(!r.autoEnable||i.__esmjTaskYieldTime__!==void 0&&!v(i.__esmjTaskYieldTime__)))return u()}function w(e={}){r={...r,...e},r.autoShareContext?i=f():i={}}function x(){i.__esmjTaskYieldTime__=void 0}function a(){i.__esmjTaskYieldTime__=performance.now()+p}function f(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}function v(e){let n=performance.now();return typeof navigator<"u"&&navigator?.scheduling?.isInputPending?.()||n>e}0&&(module.exports={autoYield,autoYieldReset,autoYieldStartPoint,forceYield,nextFrameYield,setConfig});