UNPKG

sabayon

Version:
2 lines (1 loc) 3.54 kB
let{parse:e,rawJSON:t}=JSON;if(!t){const{freeze:s,setPrototypeOf:r}=Object;class n{static isRawJSON(e){return"object"==typeof e&&!!e&&#e in e}#e=!0;constructor(e){this.rawJSON=e,s(r(this,null))}}t=t=>{const s=typeof t;switch(s){case"object":if(t)break;case"bigint":case"boolean":case"number":t=String(t);case"string":return e(t),new n(t)}throw new TypeError("Unexpected "+s)};const a=e;e=(e,t)=>{if("function"==typeof t){const s=t,r=[];e=String(e).replace(/(?:"(?:(?=(\\?))\1.)*?"\s*:?|[0-9eE+.-]+|true|false|null)/g,(e=>":"!==e.at(-1)?'"'===e[0]?r.push(e)-1:`"${e}"`:e)),t=function(e,t){switch(typeof t){case"number":t=r[t];case"string":return s.call(this,e,a(t),{source:t})}return s.call(this,e,t,{})}}return a(e,t)}}const s=(e,t,s)=>"number"==typeof t&&String(t)!==s?.source?BigInt(s.source):t,{ArrayBuffer:r,Atomics:n,Promise:a}=globalThis,{isArray:o}=Array,{create:c,getPrototypeOf:i,values:l}=Object,p=i(Int32Array),u=c(n),f=({currentTarget:e,type:t,origin:s,lastEventId:r,source:n,ports:a},o)=>e.dispatchEvent(new MessageEvent(t,{data:o,origin:s,lastEventId:r,source:n,ports:a})),g=()=>a.withResolvers();let w=0;const y=new Map,d=(e,t)=>class extends e{constructor(e,...s){super(e,...s),e instanceof t&&y.set(this,[w++,0,g()])}},h=new WeakSet,b=e=>(h.add(e),e),v=e=>null!==e&&"object"==typeof e&&!h.has(e),m=new WeakMap,A=(e,t,s)=>{if(y.has(e))t.set(e,y.get(e)[0]);else if(!(e instanceof p||e instanceof r))for(const r of l(e))v(r)&&!s.has(r)&&(s.add(r),A(r,t,s))};let k=0;const S=(...e)=>({value:new a((async t=>{const s="/__sabayon_wait_async.js";if(!k){const e=fetch(s,{method:"HEAD"}).then((e=>e.ok),(()=>!1));k=await e?1:-1}const r=new Worker(k<0?"data:application/javascript,onmessage%3De%3D%3EpostMessage(!Atomics.wait(...e.data))":s);r.onmessage=()=>{r.terminate(),t("ok")},r.postMessage(e)}))}),E=(e,t)=>{const s=y.get(e),[r,n,{promise:a}]=s;return s[1]=t,[r,a]};let{BigInt64Array:O,Int32Array:T,SharedArrayBuffer:I,addEventListener:j,postMessage:M}=globalThis,x=!0,J=e=>e,N=!1;const P=g();try{new I(4),u.waitAsync||(u.waitAsync=S),P.resolve()}catch(t){const n=M,a=j,c=[];let i="",l="";I=class extends r{},O=d(O,I),T=d(T,I),J=b,N=!0,u.notify=(e,t)=>{const[s]=(e=>m.get(e))(e);return n([i,1,e,s,t]),0},u.waitAsync=(...e)=>{const[t,s]=E(...e);return{value:s}},u.wait=(t,r,...n)=>{const[a]=E(t,r,...n),o=new XMLHttpRequest;o.open("POST",`${l}?sabayon`,!1),o.setRequestHeader("Content-Type","application/json"),o.send(`["${i}",${a},${r}]`),y.delete(t);const c=t instanceof O?e(o.responseText,s):e(o.responseText);return t.set(c),"ok"},a("message",(e=>{if(((e,t)=>{const{data:s}=e,r=o(s)&&(s.at(0)===t||0===s.at(1)&&!t);return r&&(e.stopImmediatePropagation(),e.preventDefault()),r})(e,i)){const[t,s,...r]=e.data;switch(s){case 0:i=t,l=r.at(0)?.serviceWorker||"",l||(u.wait=null,P.resolve());break;case 1:((e,t,s)=>{for(const[r,[n,a,{resolve:o}]]of y)if(t===n&&s===a){r.set(e),y.delete(r),o("ok");break}})(...r);break;case 2:((e,t,s)=>{for(const[s,r]of t)m.set(s,[r,e.currentTarget]);f(e,s)})(e,...r);break;case 3:P.resolve()}}else if(x){const{currentTarget:t,type:s,origin:r,lastEventId:n,source:a,ports:o}=e;c.push([{currentTarget:t,type:s,origin:r,lastEventId:n,source:a,ports:o},e.data])}})),j=(e,...t)=>{if(a(e,...t),c.length)for(const e of c.splice(0))f(...e)},M=(e,...t)=>n(((e,t)=>{const s=new Map;return v(t)&&A(t,s,new Set),s.size?[e,2,s,t]:t})(i,e),...t)}await P.promise,x=!1;export{u as Atomics,O as BigInt64Array,T as Int32Array,I as SharedArrayBuffer,j as addEventListener,J as ignore,N as polyfill,M as postMessage};