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