UNPKG

rvx

Version:

A signal based rendering library

2 lines (1 loc) 1.28 kB
import{Queue as t,AsyncContext as n,ASYNC as e}from"./rvx.async.min.js";import{uncapture as r,captureSelf as o,viewNodes as s}from"./rvx.min.js";class c extends Error{}async function i(t,n){const e=new AbortController;let r;void 0!==n&&(r=setTimeout(()=>e.abort(new c),n));try{for(;;){const n=await t(e.signal);if(n)return n;e.signal.throwIfAborted(),await new Promise(t=>setTimeout(t,0))}}finally{clearTimeout(r)}}const u=Symbol.for("rvx:test:queues"),a=globalThis[u]??(globalThis[u]=new Map);function l(n,e){let o=a.get(n);return void 0===o&&(o=r(()=>new t),a.set(n,o)),o.block(e)}async function f(t){const r=[],s=new n;async function c(){for(let t=r.length-1;t>=0;t--)r[t]();return s.complete()}try{const n=await t({asyncCtx:s,use:t=>o(n=>(r.push(n),e.inject(s,t)))});return await c(),n}catch(t){try{await c()}catch{}throw t}}function y(t){return o(n=>{try{return t()}finally{n()}})}function m(t,n){for(const e of s(t))if(1===e.nodeType){if(e.matches(n))return e;const t=e.querySelector(n);if(null!==t)return t}return null}function w(t,n){const e=[];for(const r of s(t))1===r.nodeType&&(r.matches(n)&&e.push(r),e.push(...r.querySelectorAll(n)));return e}export{c as PollTimeoutError,l as exclusive,i as poll,m as querySelector,w as querySelectorAll,f as runAsyncTest,y as runTest};