coincident
Version:
An Atomics based Proxy to simplify, and synchronize, Worker related tasks
2 lines (1 loc) • 3.69 kB
JavaScript
var e=Promise.withResolvers.bind(Promise);let t=0;const r=t++,n=t++;t++;const s=t++,a=t++,o=t++,c=t++,u=t++,l=t++,i=t++,f=t++,w=t++,y=t++,p=t++,d=t++,g=t++,m=t++,h=t++,b=t++,S=t++,v=t++,B=t++,M=t++,E=t++,x=t++,A=new TextDecoder;new TextEncoder,new Map(Reflect.ownKeys(Symbol).map((e=>[Symbol[e],`@${String(e)}`])));const P=Object.defineProperty,D=new ArrayBuffer(8),I=new DataView(D),L=new Uint8Array(D),T=(e,t,r)=>(e.set(t,r),r),U=e=>{L[0]=e[j++],L[1]=e[j++],L[2]=e[j++],L[3]=e[j++],L[4]=e[j++],L[5]=e[j++],L[6]=e[j++],L[7]=e[j++]},R=e=>(L[0]=e[j++],L[1]=e[j++],L[2]=e[j++],L[3]=e[j++],I.getUint32(0,!0)),O=(e,t)=>{switch(e[j++]){case a:return U(e),I.getFloat64(0,!0);case o:return e[j++];case v:{const r=T(t,j-1,{});for(let n=0,s=R(e);n<s;n++)r[O(e,t)]=O(e,t);return r}case g:{const r=T(t,j-1,[]);for(let n=0,s=R(e);n<s;n++)r.push(O(e,t));return r}case E:{const r=j-1,n=O(e,t);return T(t,r,new globalThis[n](O(e,t)))}case m:{const r=j-1,n=R(e);return T(t,r,e.slice(j,j+=n).buffer)}case p:{const r=j-1,n=R(e);return T(t,r,A.decode(e.slice(j,j+=n)))}case h:return T(t,j-1,new Date(O(e,t)));case S:{const r=T(t,j-1,new Map);for(let n=0,s=R(e);n<s;n++)r.set(O(e,t),O(e,t));return r}case M:{const r=T(t,j-1,new Set);for(let n=0,s=R(e);n<s;n++)r.add(O(e,t));return r}case b:{const r=O(e,t),n=O(e,t),s=O(e,t),a=new(globalThis[r]||Error)(n);return T(t,j-1,P(a,"stack",{value:s}))}case B:{const r=O(e,t),n=O(e,t);return T(t,j-1,new RegExp(r,n))}case r:return!1;case n:return!0;case c:return NaN;case u:return 1/0;case l:return-1/0;case i:return 0;case f:return-0;case s:return null;case w:return U(e),I.getBigInt64(0,!0);case y:return U(e),I.getBigUint64(0,!0);case d:return(e=>{switch(e[0]){case"@":return Symbol[e.slice(1)];case"#":return Symbol.for(e.slice(1));case"!":return Symbol(e.slice(1));default:return Symbol()}})(O(e,t));case x:return t.get(R(e));default:return}};let j=0;const N=({byteOffset:e=0}={})=>(t,r)=>{return n=new Uint8Array(r,e,t),j=0,O(n,new Map);var n},k=[],_=new WeakSet,F=(...e)=>(_.add(e),e),{create:K}=Object;let V="coincident-",W=!0;try{new SharedArrayBuffer(4,{maxByteLength:8}),V+=crypto.randomUUID()}catch(e){W=!1,V+=Math.random().toString(36).substring(2)}const Y=2*Int32Array.BYTES_PER_ELEMENT,$={byteOffset:Y},q=(e,t,r)=>{const n="then"!==t;return n&&(e[t]=r),n},z=Promise.withResolvers();addEventListener("message",(e=>{(e=>{e.stopImmediatePropagation(),e.preventDefault()})(e),z.resolve([e.data,e.ports[0]])}),{once:!0});var C=async t=>{const[r,n]=await z.promise,s=W&&!!r,a=t?.transform,o=(t?.decoder||N)($),c=!1!==t?.transfer;let u,l,i;if(W){const e=new SharedArrayBuffer(t?.minByteLength||32767,{maxByteLength:t?.maxByteLength||16777216});u=new Int32Array(e),({pause:l,wait:i}=Atomics),!l||s||e instanceof ArrayBuffer||(i=(e,t)=>{for(;e[t]<1;)l()})}const[f,w]=((t=e=>e)=>{const r=new Map;let n=0;return[()=>{let s;do{s=t(n++)}while(r.has(s));const a=e();return r.set(s,a),[s,a.promise]},(e,t,n)=>{const s=r.get(e);r.delete(e),n?s?.reject(n):s?.resolve(t)}]})(String),y=new Map,p=K(null),d=new Proxy(p,{get(e,t){if("then"===t)return;let l=y.get(t);return l||y.set(t,l=(...e)=>{const l=((e,t)=>{let r=k;return e&&_.has(t.at(-1)||k)&&(r=t.pop(),_.delete(r)),r})(c,e),w=[u,t,a?e.map(a):e];if(W){s?postMessage({ID:r,data:w},l):n.postMessage(w,l),i(u,0),u[0]=0;const e=u[1]?o(u[1],u.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=f();return w[0]=e,n.postMessage(w,l),t}}),l},set:q});return n.onmessage=async({data:e})=>{"string"==typeof e[0]?w.apply(null,e):(await(async(e,t,r)=>{try{const n=await t[e[1]].apply(null,e[2]);e[1]=r?r(n):n,e[2]=null}catch(t){e[2]=t}})(e,p,a),n.postMessage(e))},{native:W,proxy:d,transfer:F}};export{C as default};