UNPKG

@webreflection/coincident

Version:

An Atomics based Proxy to simplify, and synchronize, Worker related tasks

2 lines (1 loc) 6.71 kB
const e="592e34ef",t="="+e,r="-"+e,{create:n}=Object;let s="coincident-",a=!0;try{new SharedArrayBuffer(4,{maxByteLength:8}),s+=crypto.randomUUID()}catch(e){a=!1,s+=Math.random().toString(36).substring(2)}const o=2*Int32Array.BYTES_PER_ELEMENT,c={byteOffset:o,useUTF16:!0,circular:!0},l=new Map,i=(e,t,r)=>{const n="then"!==t;return n&&(e[t]=r),n},u=()=>Promise.withResolvers(),{fromCharCode:f}=String,{min:y}=Math;var p=e=>({byteOffset:t})=>(r,n)=>{const s=new Uint16Array(n,t,r);let a="",o=0;for(;o<r;){const e=y(o+65535,r);a+=f.apply(null,s.subarray(o,e)),o=e}return e(a)};const{parse:d}=JSON,g=p(d),h="array",w="bigint",b="function",m="null",E="number",v="object",O="symbol",P="undefined";var S=Object.fromEntries([h,w,"boolean",b,m,E,v,"string",O,P,"view"].map(((e,t)=>[e,t])));const{parse:T}=JSON,x=p((e=>{const t=T(e);switch(t[0]){case S.view:{const[e,r]=t[1],n=new Uint8Array(r);t[1]=new globalThis[e](n.buffer);break}case S[P]:t[1]=void 0;break;case S[w]:t[1]=BigInt(t[1])}return t})),R=u();addEventListener("message",(e=>{(e=>{e.stopImmediatePropagation(),e.preventDefault()})(e),R.resolve([e.data,e.ports[0]])}),{once:!0});var _=async e=>{const[t,r]=await R.promise,s=a&&!!t,o=e?.transform,f=(e?.decoder||g)(c);let y,p;if(a){const t=new SharedArrayBuffer(e?.minByteLength||65535,{maxByteLength:e?.maxByteLength||16777216});y=new Int32Array(t),p=Atomics.wait}const[d,h]=((e,t=0)=>[r=>{const n=u();do{r=e(t++)}while(l.has(r));return l.set(r,n),[r,n]},(e,t,r)=>{const n=l.get(e);l.delete(e),r?n.reject(r):n.resolve(t)}])(String),w=new Map,b=n(null),m=new Proxy(b,{get(e,n){if("then"===n)return;let c=w.get(n);return c||w.set(n,c=(...e)=>{const c=[y,n,o?e.map(o):e];if(a){s?postMessage({ID:t,data:c}):r.postMessage(c),p(y,0),y[0]=0;const e=y[1]?f(y[1],y.buffer):void 0;if(e instanceof Error)throw e;return e}{const[e,t]=d();return c[0]=e,r.postMessage(c),t.promise}}),c},set:i});return r.onmessage=async({data:e})=>{"string"==typeof e[0]?h.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,b,o),r.postMessage(e))},{native:a,proxy:m}};const A="apply",M="construct",k="defineProperty",I="deleteProperty",N="get",B="getOwnPropertyDescriptor",j="getPrototypeOf",L="has",Y="isExtensible",D="ownKeys",F="preventExtensions",U="set",C="setPrototypeOf";var W=Object.freeze({__proto__:null,APPLY:A,CONSTRUCT:M,DEFINE_PROPERTY:k,DELETE_PROPERTY:I,GET:N,GET_OWN_PROPERTY_DESCRIPTOR:B,GET_PROTOTYPE_OF:j,HAS:L,IS_EXTENSIBLE:Y,OWN_KEYS:D,PREVENT_EXTENSION:F,SET:U,SET_PROTOTYPE_OF:C});const $="destruct";function K(){return this}const G=new FinalizationRegistry((([e,t,r])=>{r&&console.debug(`%c${String(t)}`,"font-weight:bold","collected"),e(t)})),z=Object.create(null),{Object:J,Proxy:V,Reflect:X}=globalThis,{isArray:H}=Array,{ownKeys:q}=X,{create:Q,hasOwn:Z,values:ee}=J,te=(e,t)=>t===h?e[0]:t===b?e():t===v?e.$:e,re=(e,t,r,n)=>{const s={type:{value:t}},a=Z(e,"valueOf");for(const o of ee(W)){let c=n(e[o]||X[o]);if(a&&o===N){const{valueOf:n}=e,{value:s}=c;c={value(e,a,...o){return a===r?n.call(this,te(e,t)):s.call(this,e,a,...o)}}}s[o]=c}return Q(e,s)},ne=(e,t,r,n=e)=>{if(n===e)switch(typeof e){case v:case P:n||(n=!1);case b:break;default:n=!1,t===e&&(t=J(e))}const s=new V(t,r),{destruct:a}=r;return a?((e,t,{debug:r,handler:n,return:s,token:a=e}=z)=>{const o=s||new Proxy(e,n||z),c=[o,[t,e,!!r]];return!1!==a&&c.push(a),G.register(...c),o})(e,a,{token:n,return:s}):s},se=e=>t=>{const r=typeof t;return r===v?t?e.get(t)?.[0]??(e=>H(e)?h:v)(t):m:r},ae=e=>t=>{let r=typeof t;switch(r){case v:if(!t){r=m;break}case b:const n=e.get(t);n&&([r,t]=n)}return[r,t]},oe=e=>((e=>{G.unregister(e)})(e),e);var ce=e=>{const t=new WeakMap,r=Symbol(),n={},s=(e,r,n)=>(t.set(e,[r,n]),e),a={proxy:n,release:oe,pair:ae(t),typeOf:se(t),isProxy:e=>t.has(e),valueOf:e=>e[r]??e.valueOf()};for(const t of q(e)){if(Z(a,t))continue;const o=e[t];switch(t){case h:{const e=re(o,t,r,(e=>({value([t],...r){return e.call(this,t,...r)}})));n[t]=(t,...r)=>s(ne(t,[t],e,...r),h,t);break}case b:{const e=re(o,t,r,(e=>({value(t,...r){return e.call(this,t(),...r)}})));n[t]=(t,...r)=>{return s(ne(t,(n=t,K.bind(n)),e,...r),b,t);var n};break}case v:{const e=re(o,t,r,(e=>({value({$:t},...r){return e.call(this,t,...r)}})));n[t]=(t,...r)=>s(ne(t,{$:t},e,...r),v,t);break}default:{const e=re(o,t,r,(e=>({value:e})));n[t]=(r,...n)=>s(ne(r,r,e,...n),t,r);break}}}return a};const{drop:le,get:ie,hold:ue}=(()=>{const e=new Map,t=new Map;let r=0;return{clear:()=>{e.clear(),t.clear()},drop:r=>{const[n,s]=typeof r===E?[t,e]:[e,t],a=n.has(r);return a&&(s.delete(n.get(r)),n.delete(r)),a},get:e=>t.get(e),hold:n=>{if(!e.has(n)){let s;for(;t.has(s=r++););e.set(n,s),t.set(s,n)}return e.get(n)}}})(),fe=new Map;for(const e of Reflect.ownKeys(Symbol))typeof Symbol[e]===O&&(fe.set(Symbol[e],e),fe.set(e,Symbol[e]));const ye=e=>fe.get(e)||`.${Symbol.keyFor(e)||""}`,{isArray:pe}=Array,{isView:de}=ArrayBuffer,{[A]:ge}=Reflect;var he=(e,t)=>{const r=new Map,n=(e,t)=>{let n=r.get(e)?.deref();return n||r.set(e,new WeakRef(n=t(e))),n},s=([e,t])=>{switch(e){case S[v]:return null==t?globalThis:typeof t===E?n(t,i.object):t;case S[h]:return typeof t===E?n(t,i.array):t;case S[b]:return typeof t===E?n(t,i.function):ie(parseInt(t));case S[O]:return(e=>fe.get(e)||Symbol.for(e.slice(1)))(t);default:return t}},a=e=>{let[r,n]=f(e);switch(r){case v:if(n==globalThis||null==n)n=null;else if(typeof n===v){if(n=t(n),pe(n))return[S[h],n.map(a)];if(de(n))return[S.view,n];{const e={};for(const t in n)e[t]=a(n[t]);n=e}}return[S[v],n];case h:return[S[h],typeof n===E?n:t(n).map(a)];case b:return[S[b],typeof n===b?String(ue(t(n))):n];case O:return[S[O],ye(e)];default:return[S[r],n]}},o=(...t)=>s(e(...t)),c={[k]:(e,t,r)=>o(k,e,a(t),a(r)),[I]:(e,t)=>o(I,e,a(t)),[N]:(e,t)=>o(N,e,a(t)),[j]:e=>o(j,e),[B]:(e,t)=>{const r=o(B,e,a(t));if(r){const{get:e,set:t,value:n}=r;e&&(r.get=s(e)),t&&(r.set=s(t)),n&&(r.value=s(n))}return r},[L]:(e,t)=>o(L,e,a(t)),[Y]:e=>o(Y,e),[D]:e=>o(D,e).map(s),[F]:e=>o(F,e),[U]:(e,t,r)=>o(U,e,a(t),a(r)),[C]:(e,t)=>o(C,e,a(t)),[$](t){r.delete(t),e($,t)}},l={[v]:c,[h]:c,[b]:{...c,[A]:(e,...t)=>o(A,e,...t.map(a)),[M]:(e,...t)=>o(M,e,...t.map(a))}},{proxy:i,isProxy:u,pair:f}=ce(l);return{isProxy:u,global:i.object(null),method:async(e,t,...r)=>{const n=parseInt(t);switch(e){case A:{const[e,t]=r;return a(await ge(ie(n),s(e),t.map(s)))}case $:le(n)}}}},we=async e=>{let n=!1;const s=e?.decoder||g,a=await _({...e,decoder(e){const t=s(e),r=x(e);return(e,s)=>n?(n=!1,r(e,s)):t(e,s)}}),o=a.proxy[t],{isProxy:c,global:l,method:i}=he((function(...e){return n=!0,o.apply(this,e)}),e?.transform||(e=>e));return a.proxy[r]=i,{...a,window:l,isWindowProxy:c}};export{we as default};