coincident
Version:
An Atomics based Proxy to simplify, and synchronize, Worker related tasks
2 lines (1 loc) • 8.31 kB
JavaScript
const e="5d6208ba",t="="+e,r="-"+e;let n=0;const s=n++,a=n++;n++;const c=n++,o=n++,i=n++,u=n++,l=n++,f=n++,y=n++,g=n++,p=n++,w=n++,h=n++,d=n++,b=n++,m=n++,x=n++,v=n++,_=n++,P=n++,S=n++,A=n++,B=n++,M=n++,E=new TextDecoder;new TextEncoder;const O=new Map(Reflect.ownKeys(Symbol).map((e=>[Symbol[e],`@${String(e)}`]))),j=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()}},T=e=>O.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),U=Object.defineProperty,L=Object.assign,R=Array.isArray,k=ArrayBuffer.isView,D=(e,t)=>[e,t],I=e=>e,$={},W=e=>(t,r=new Map)=>{for(let n=0,s=t.length;n<s;n++)t[n]=e(t[n],r);return t},q=([e,t])=>0===e?t:j(t),F=e=>"string"==typeof e?D(0,e):D(16,T(e)),N=new ArrayBuffer(8),K=new DataView(N),V=new Uint8Array(N),z=(e,t,r)=>(e.set(t,r),r),Y=e=>{V[0]=e[H++],V[1]=e[H++],V[2]=e[H++],V[3]=e[H++],V[4]=e[H++],V[5]=e[H++],V[6]=e[H++],V[7]=e[H++]},C=e=>(V[0]=e[H++],V[1]=e[H++],V[2]=e[H++],V[3]=e[H++],K.getUint32(0,!0)),G=(e,t)=>{switch(e[H++]){case o:return Y(e),K.getFloat64(0,!0);case i:return e[H++];case P:{const r=z(t,H-1,{});for(let n=0,s=C(e);n<s;n++)r[G(e,t)]=G(e,t);return r}case b:{const r=z(t,H-1,[]);for(let n=0,s=C(e);n<s;n++)r.push(G(e,t));return r}case B:{const r=H-1,n=G(e,t);return z(t,r,new globalThis[n](G(e,t)))}case m:{const r=H-1,n=C(e);return z(t,r,e.slice(H,H+=n).buffer)}case h:{const r=H-1,n=C(e);return z(t,r,E.decode(e.slice(H,H+=n)))}case x:return z(t,H-1,new Date(G(e,t)));case _:{const r=z(t,H-1,new Map);for(let n=0,s=C(e);n<s;n++)r.set(G(e,t),G(e,t));return r}case A:{const r=z(t,H-1,new Set);for(let n=0,s=C(e);n<s;n++)r.add(G(e,t));return r}case v:{const r=G(e,t),n=G(e,t),s=G(e,t),a=new(globalThis[r]||Error)(n);return z(t,H-1,U(a,"stack",{value:s}))}case S:{const r=G(e,t),n=G(e,t);return z(t,H-1,new RegExp(r,n))}case s:return!1;case a:return!0;case u:return NaN;case l:return 1/0;case f:return-1/0;case y:return 0;case g:return-0;case c:return null;case p:return Y(e),K.getBigInt64(0,!0);case w:return Y(e),K.getBigUint64(0,!0);case d:return j(G(e,t));case M:return t.get(C(e));default:return}};let H=0;const J=({byteOffset:e=0}={})=>(t,r)=>{return n=new Uint8Array(r,e,t),H=0,G(n,new Map);var n};let Q=0;const X=Q++,Z=Q++,ee=Q++,te=Q++,re=Q++,ne=Q++,se=Q++,ae=Q++,ce=Q++,oe=Q++,ie=Q++,ue=Q++,le=Q++,fe=Q++,ye=Q++,ge=Q++,pe=Q++,we=Q++,{getPrototypeOf:he}=Object,{toString:de}=$,be=(e,t=de.call(e).slice(8,-1))=>t in globalThis?t:be(he(e)||$),me=(e,t)=>new ArrayBuffer(e,{maxByteLength:t}),xe=([e,t],r)=>{const n=r?e.byteLength:e.length;if(r){if(t){const r=me(n,t);new Uint8Array(r).set(new Uint8Array(e)),e=r}}else{const r=t?me(n,t):new ArrayBuffer(n);new Uint8Array(r).set(e),e=r}return e};const ve=/\[('|")?(.+?)\1\]/g,_e=(e,t)=>e?.[t];const{preventExtensions:Pe}=Object;var Se=({reflect:e=I,transform:t=I,released:r=I,buffer:n=!1}=$)=>{const s=W(q),a=W(F),c=e=>{if(!R(e))return e;const[t,r]=e;if(1&t)return u(e,t,r);switch(t){case 2:return A;case 0:return r;case 16:return j(r);case 32:return BigInt(r);case 68:return(([e,t,r,n],s)=>{const a=xe(t,s),c=globalThis[e];return n?new c(a,r,n):new c(a,r)})(r,n);case 64:return xe(r,n)}},o=(e,r=new Map)=>{switch(typeof e){case"object":{if(null===e)break;if(e===globalThis)return P;if(S in e)return d;let n=r.get(e);if(!n){const s=t(e);if(b||!h.has(s)){if(R(s)){const t=[];n=D(4,t),r.set(e,n);for(let e=0,n=s.length;e<n;e++)t[e]=o(s[e],r);return n}if(!(k(s)||s instanceof ArrayBuffer||"Object"!==be(s))){const t={};n=D(2,t),r.set(e,n);for(const e in s)t[e]=o(s[e],r);return n}}n=D(0,s),r.set(e,n)}return n}case"function":{if(S in e)return d;let n=r.get(e);if(!n){const s=t(e);n=D(8,m(s)),r.set(e,n)}return n}case"symbol":return D(16,T(e))}return e},i=W(o),u=(e,t,r)=>{let n=_.get(r),s=n?.deref();return s||(n&&B.unregister(n),s=new(3===t?g:5===t?p:w)(e,r),n=new WeakRef(s),_.set(r,n),B.register(s,r,n)),s},l=e=>{switch(typeof e){case"object":if(null===e)break;case"function":return S in e;default:return!1}};class f{constructor(e){this._=e}get(t,r){return c(e(oe,this._,F(r)))}set(t,r,n){return e(pe,this._,F(r),o(n))}ownKeys(t){return s(e(ye,this._),_)}getOwnPropertyDescriptor(t,r){const n=c(e(ie,this._,F(r)));if(n)for(const e in n)n[e]=c(n[e]);return n}defineProperty(t,r,n){return e(ae,this._,F(r),o(n))}deleteProperty(t,r){return e(ce,this._,F(r))}getPrototypeOf(t){return c(e(ue,this._))}setPrototypeOf(t,r){return e(we,this._,o(r))}isExtensible(t){return e(fe,this._)}preventExtensions(t){return Pe(t)&&e(ge,this._)}}const y=(t,r,n)=>n===S?!!(d=t):e(le,r,F(n));class g extends f{constructor(e,t){return new Proxy({_:e},super(t))}has(e,t){return y(e._,this._,t)}}class p extends f{constructor(e,t){return new Proxy(e,super(t))}has(e,t){return y(e,this._,t)}}class w extends f{constructor(e,t){return new Proxy(Ae.bind(e),super(t))}has(e,t){return y(e(),this._,t)}construct(t,r){return c(e(se,this._,i(r)))}apply(t,r,n){const s=new Map;return c(e(ne,this._,o(r,s),i(n,s)))}get(e,t){switch(t){case"apply":return(t,r)=>this.apply(e,t,r);case"call":return(t,...r)=>this.apply(e,t,r);default:return super.get(e,t)}}}let h,d,b=!0;const{id:m,ref:x,unref:v}=((e=0,t=new Map,r=new Map)=>({clear:()=>{t.clear(),r.clear()},id:n=>{let s=r.get(n);if(void 0===s){for(;t.has(s=e++););t.set(s,n),r.set(n,s)}return s},ref:e=>t.get(e),unref:e=>(r.delete(t.get(e)),t.delete(e))}))(),_=new Map,P=D(2,null),S=Symbol("reflected-ffi"),A=new g(P,null),B=new FinalizationRegistry((t=>{_.delete(t),e(X,t)}));return{global:A,isProxy:l,assign(t,...r){const n=l(t),s=L(n?{}:t,...r);return n&&e(Z,d[1],o(s)),t},direct:e=>(b&&(b=!1,h=new WeakSet),h.add(e),e),evaluate:(t,...r)=>c(e(ee,null,function(e=this){return String(e).replace(/^(async\s*)?(\bfunction\b)?(.*?)\(/,((e,t,r,n)=>n&&!r?`${t||""}function ${n}(`:e))}(t),i(r))),gather(t,...r){const n=l(t),s=n?c:e=>t[e];n&&(r=e(te,d[1],a(r,_)));for(let e=0;e<r.length;e++)r[e]=s(r[e]);return r},query:(t,r)=>l(t)?c(e(re,d[1],r)):((e,t)=>t.replace(ve,".$2").split(".").reduce(_e,e))(t,r),reflect(e,t,...n){switch(e){case ne:{const[e,r]=n;for(let e=0,t=r.length;e<t;e++)r[e]=c(r[e]);return o(Reflect.apply(x(t),c(e),r))}case X:return r(x(t)),v(t)}}}};function Ae(){return this}var Be=Promise.withResolvers.bind(Promise);const Me=[],Ee=new WeakSet,Oe=(...e)=>(Ee.add(e),e),{create:je}=Object;let Te="coincident-",Ue=!0;try{new SharedArrayBuffer(4,{maxByteLength:8}),Te+=crypto.randomUUID()}catch(e){Ue=!1,Te+=Math.random().toString(36).substring(2)}const Le=2*Int32Array.BYTES_PER_ELEMENT,Re={byteOffset:Le},ke=(e,t,r)=>{const n="then"!==t;return n&&(e[t]=r),n},De=Promise.withResolvers();addEventListener("message",(e=>{(e=>{e.stopImmediatePropagation(),e.preventDefault()})(e),De.resolve([e.data,e.ports[0]])}),{once:!0});var Ie=async e=>{const[t,r]=await De.promise,n=Ue&&!!t,s=e?.transform,a=(e?.decoder||J)(Re),c=!1!==e?.transfer;let o,i,u;if(Ue){const t=new SharedArrayBuffer(e?.minByteLength||32767,{maxByteLength:e?.maxByteLength||16777216});o=new Int32Array(t),({pause:i,wait:u}=Atomics),!i||n||t instanceof ArrayBuffer||(u=(e,t)=>{for(;e[t]<1;)i()})}const[l,f]=((e=e=>e)=>{const t=new Map;let r=0;return[()=>{let n;do{n=e(r++)}while(t.has(n));const s=Be();return t.set(n,s),[n,s.promise]},(e,r,n)=>{const s=t.get(e);t.delete(e),n?s?.reject(n):s?.resolve(r)}]})(String),y=new Map,g=je(null),p=new Proxy(g,{get(e,i){if("then"===i)return;let f=y.get(i);return f||y.set(i,f=(...e)=>{const f=((e,t)=>{let r=Me;return e&&Ee.has(t.at(-1)||Me)&&(r=t.pop(),Ee.delete(r)),r})(c,e),y=[o,i,s?e.map(s):e];if(Ue){n?postMessage({ID:t,data:y},f):r.postMessage(y,f),u(o,0),o[0]=0;const e=o[1]?a(o[1],o.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=l();return y[0]=e,r.postMessage(y,f),t}}),f},set:ke});return r.onmessage=async({data:e})=>{"string"==typeof e[0]?f.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,g,s),r.postMessage(e))},{native:Ue,proxy:p,transfer:Oe}},$e=async e=>{const n=await Ie({...e,decoder:e?.decoder||J}),s=Se({...e,buffer:!0,reflect:n.proxy[t]});return n.proxy[r]=s.reflect,{...n,window:s.global,isWindowProxy:s.isProxy,ffi:{assign:s.assign,direct:s.direct,evaluate:s.evaluate,gather:s.gather,query:s.query}}};export{$e as default};