@webreflection/coincident
Version:
An Atomics based Proxy to simplify, and synchronize, Worker related tasks
2 lines (1 loc) • 5.32 kB
JavaScript
const{getPrototypeOf:t}=Object,e=t=>{const e=typeof t;switch(e){case"function":case"undefined":return"";case"object":return null===t?"null":"object";default:return e}};let n="coincident-";try{new SharedArrayBuffer(4,{maxByteLength:8}),n+=crypto.randomUUID()}catch(t){n+=Math.random().toString(36).substring(2)}const r=65535;var s=256===new DataView(new Uint16Array([256]).buffer).getUint16(0,!0),a=0,c=1,o=2,i=3,f=4,u=5,b=10,l=20,g=30,y=40,w=50,U=51,h=52,k=53,m=54,p=55,d=64,S=70,A=100,E=101,B=102,I=103,O=104,x=105,L=255;const{min:M}=Math,{defineProperty:j}=Object,{fromCharCode:D}=String,F=t=>{switch(t.getUint8(V++)){case U:return t.getUint8(V++);case k:{const e=t.getUint16(V,s);return V+=2,e}case p:{const e=t.getUint32(V,s);return V+=4,e}default:return(t=>{const e=t.getFloat64(V,s);return V+=8,e})(t)}},T=(t,e)=>{const n=V++;switch(t.getUint8(n)){case b:{const r=[];e.set(n,r);const s=F(t);for(let n=0;n<s;n++)r[n]=T(t,e);return r}case l:{const r={};e.set(n,r);const s=F(t);for(let n=0;n<s;n++){const n=T(t,e);n!==N&&(r[n]=T(t,e))}return r}case u:{const s=F(t),a=2*s,c=t.buffer.slice(V,V+a),o=new Uint16Array(c,0,s);let i="";for(let t=0;t<s;t+=r){const e=M(t+r,s);i+=D.apply(null,o.subarray(t,e))}return e.set(n,i),V+=a,i}case g:{const r=F(t),s=F(t),a=[r];s&&a.push({maxByteLength:s});const c=new ArrayBuffer(...a);return e.set(n,c),new Uint8Array(c).set(new Uint8Array(t.buffer,V,r)),V+=r,c}case y:{const r=T(t,e),s=F(t),a=F(t),c=[T(t,e),s];a&&c.push(a);const o=new globalThis[r](...c);return e.set(n,o),o}case A:{const r=new Date(F(t));return e.set(n,r),r}case E:{const r=F(t),s=new Map;e.set(n,s);for(let n=0;n<r;n++){const n=T(t,e);n!==N&&s.set(n,T(t,e))}return s}case B:{const r=F(t),s=new Set;e.set(n,s);for(let n=0;n<r;n++){const n=T(t,e);n!==N&&s.add(n)}return s}case O:{const r=T(t,e),s=T(t,e),a=new RegExp(r,s);return e.set(n,a),a}case x:{const r=globalThis[T(t,e)]||Error,s=T(t,e),a=T(t,e),c=new r(s);return e.set(n,j(c,"stack",{value:a})),c}case a:return e.get(F(t));case w:return t.getInt8(V++);case h:{const e=t.getInt16(V,s);return V+=2,e}case m:{const e=t.getInt32(V,s);return V+=4,e}case d:{const e=t.getFloat64(V,s);return V+=8,e}case S:{const e=t.getBigInt64(V,s);return V+=8,e}case o:return!0;case c:return!1;case i:return null;case f:return;case L:return N;case I:return(U=T(t,e)).startsWith("Symbol.")?Symbol[U.slice(U.indexOf(".")+1)]:Symbol.for(U);default:throw new Error(`Unknown type: ${t.getUint8(V-1)}`)}var U},N=Symbol();let V=0;const v=(t,{byteOffset:e=0}={})=>(V=e,T(new DataView(t),new Map)),{isArray:z}=Array,{isView:C}=ArrayBuffer,{isInteger:P,isFinite:R}=Number,{entries:J}=Object,W=(t,e)=>{e<256?(H(t,K+2),t.setUint8(K++,U),t.setUint8(K++,e)):e<65536?(H(t,K+3),t.setUint8(K++,k),t.setUint16(K,e,s),K+=2):e<4294967296?(H(t,K+5),t.setUint8(K++,p),t.setUint32(K,e,s),K+=4):$(t,e)},$=(t,e)=>{H(t,K+9),t.setUint8(K++,d),t.setFloat64(K,e,s),K+=8},_=(t,e,n)=>{const r=e.get(n);return"number"==typeof r?(H(t,K+1),t.setUint8(K++,a),W(t,r),!0):(e.set(n,K),!1)},Y=(t,e,n,r)=>{H(t,K+10+n*r),t.setUint8(K++,e),W(t,n)},q=t=>{H(t,K+1),t.setUint8(K++,L)},G=(t,e)=>{H(t,K+1),t.setUint8(K++,e)},H=(t,e)=>{Q<e&&(Q+=e+r,t.buffer.grow(Q))};let K=0,Q=K;const X=(n,r,a,U=e(a))=>{switch(U){case"null":G(n,i);break;case"object":if(_(n,r,a))break;switch(!0){case z(a):{const t=a.length;Y(n,b,t,1);for(let e=0;e<t;e++)X(n,r,a[e]);break}case C(a):{const{BYTES_PER_ELEMENT:e,buffer:s,byteOffset:c,length:o}=a;if(G(n,y),X(n,r,(e=>{for(;!(e.name in globalThis);)e=t(e);return e.name})(a.constructor),"string"),W(n,c),W(n,o!==(s.byteLength-c)/e?o:0),_(n,r,s))break;a=s}case a instanceof ArrayBuffer:{const t=a.byteLength,e=a.resizable?a.maxByteLength:0;if(Y(n,g,t,1),W(n,e),t){H(n,K+=t);const e=new Uint8Array(a,0,t);new Uint8Array(n.buffer).set(e,K-t)}break}case a instanceof Date:G(n,A),W(n,+a);break;case a instanceof Map:Y(n,E,a.size,1);for(const[t,s]of a){const a=e(t),c=e(s);a&&c?(X(n,r,t,a),X(n,r,s,c)):q(n)}break;case a instanceof Set:Y(n,B,a.size,1);for(const t of a){const s=e(t);s?X(n,r,t,s):q(n)}break;case a instanceof RegExp:G(n,O),X(n,r,a.source,"string"),X(n,r,a.flags,"string");break;case a instanceof Error:G(n,x),X(n,r,a.name,"string"),X(n,r,a.message,"string"),X(n,r,a.stack,"string");break;default:{if("toJSON"in a){const t=a.toJSON();if(t===a){G(n,l),W(n,0);break}if(_(n,r,a=t))break}const t=J(a),s=t.length;Y(n,l,s,1);for(let a=0;a<s;a++){const s=t[a],c=e(s[1]);c?(X(n,r,s[0],"string"),X(n,r,s[1],c)):q(n)}break}}break;case"boolean":G(n,a?o:c);break;case"number":P(a)?((t,e)=>{-128<=e&&e<128?(H(t,K+2),t.setUint8(K++,w),t.setInt8(K++,e)):-32768<=e&&e<32768?(H(t,K+3),t.setUint8(K++,h),t.setInt16(K,e,s),K+=2):-2147483648<=e&&e<2147483648?(H(t,K+5),t.setUint8(K++,m),t.setInt32(K,e,s),K+=4):$(t,e)})(n,a):R(a)?$(n,a):G(n,i);break;case"string":{if(_(n,r,a))break;const t=a.length;Y(n,u,t,2);for(let e=0;e<t;e++)n.setUint16(K,a.charCodeAt(e),s),K+=2;break}case"bigint":H(n,K+9),n.setUint8(K++,S),n.setBigInt64(K,a,s),K+=8;break;case"symbol":{const t=(t=>{const e=String(t).slice(7,-1);return e.startsWith("Symbol.")||Symbol.keyFor(t)?e:""})(a);if(t){G(n,I),X(n,r,t,"string");break}}case"":G(n,f);break;default:throw new Error(`Unsupported type: ${U}`)}},Z=(t,e,{byteOffset:n=0}={})=>{const r=K=n;return Q=e.byteLength,X(new DataView(e),new Map,t),K-r};export{v as decode,Z as encode};