reflected 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +5 -9
  2. package/dist/async-CYIlyalV.js +1 -0
  3. package/dist/async-D2KaG2S3.js +1 -0
  4. package/dist/async.js +1 -1
  5. package/dist/broadcast-BDDwfg2T.js +1 -0
  6. package/dist/{broadcast-D0xibjmN.js → broadcast-Dbr-yPNb.js} +1 -1
  7. package/dist/broadcast.js +1 -1
  8. package/dist/channel-DQBWE7_E.js +1 -0
  9. package/dist/index.js +1 -1
  10. package/dist/message-8qL8kOnf.js +1 -0
  11. package/dist/message-Dt36xGK4.js +1 -0
  12. package/dist/message.js +1 -1
  13. package/dist/sender-DL3isFNg.js +1 -0
  14. package/dist/shared-BVwQ7RKn.js +1 -0
  15. package/dist/shared-D1EE5wug.js +1 -0
  16. package/dist/shared-DPsM-o7V.js +1 -0
  17. package/dist/sw.js +1 -1
  18. package/dist/xhr-1Wu8YOTt.js +1 -0
  19. package/dist/xhr-D0exWC1g.js +1 -0
  20. package/dist/xhr.js +1 -1
  21. package/package.json +2 -1
  22. package/src/main/async.js +2 -2
  23. package/src/main/sab.js +3 -3
  24. package/src/main/shared.js +19 -14
  25. package/src/main/xhr.js +4 -3
  26. package/src/service/listeners.js +11 -1
  27. package/src/shared.js +2 -0
  28. package/src/worker/async.js +9 -7
  29. package/src/worker/shared.js +16 -7
  30. package/src/worker/xhr.js +8 -6
  31. package/test/README/index.html +1 -1
  32. package/test/README/index.js +3 -7
  33. package/test/README/worker.js +1 -1
  34. package/test/ffi/index.html +11 -0
  35. package/test/ffi/index.js +6 -0
  36. package/test/index.js +2 -2
  37. package/test/sw.js +1 -1
  38. package/types/main/shared.d.ts +6 -2
  39. package/types/shared.d.ts +1 -0
  40. package/types/worker/shared.d.ts +5 -0
  41. package/dist/async-CKeQT1Lz.js +0 -1
  42. package/dist/async-DF1WaSCr.js +0 -1
  43. package/dist/broadcast-Dc7wAEE6.js +0 -1
  44. package/dist/channel-CdS9bLt4.js +0 -1
  45. package/dist/message-D7s0I-EX.js +0 -1
  46. package/dist/message-DoGrs_Ai.js +0 -1
  47. package/dist/sender-BMLGKAss.js +0 -1
  48. package/dist/shared-C_kd5Il-.js +0 -1
  49. package/dist/shared-MkVjuKUg.js +0 -1
  50. package/dist/shared-RFmxa5x4.js +0 -1
  51. package/dist/xhr-CKCWEqUE.js +0 -1
  52. package/dist/xhr-D5y-AocB.js +0 -1
  53. package/test/README/mini-coi.js +0 -28
package/README.md CHANGED
@@ -43,8 +43,8 @@ const reflected = await reflect({
43
43
  // use this helper to transform such data into something
44
44
  // that the worker can use/understand after invoke
45
45
  // ⚠️ must be synchronous and it's invoked synchronously
46
- onsync(response:Int32Array) {
47
- return response.length ? response[0] : undefined;
46
+ onsync(response:unknown) {
47
+ return response;
48
48
  },
49
49
 
50
50
  // receives the data from the main thread when
@@ -90,8 +90,6 @@ const worker = await reflect(
90
90
  // ℹ️ type is enforced to be 'module' due to top-level await
91
91
  {
92
92
  // invoked when the worker asks to synchronize a call
93
- // and it must return an Int32Array reference to populate
94
- // the SharedArrayBuffer and notify/unlock the worker
95
93
  // ℹ️ works even if synchronous but it's resolved asynchronously
96
94
  // ⚠️ the worker is not responsive until this returns so
97
95
  // be sure you handle errors gracefully to still provide
@@ -101,13 +99,11 @@ const worker = await reflect(
101
99
 
102
100
  if (invoke === 'test_sum') {
103
101
  // just demoing this can be async too
104
- const value = await test_sum(...args);
105
- return new Int32Array([value]);
102
+ return await test_sum(...args);
106
103
  }
107
104
 
108
- // errors should still be Int32Array but
109
- // it is trivial to return no result
110
- return new Int32Array(0);
105
+ // it is trivial to return no result or even errors
106
+ return new Error('unknown ' + invoke);
111
107
  },
112
108
 
113
109
  // *optional* helper to process data returned from the worker when
@@ -0,0 +1 @@
1
+ import{w as e}from"./with-resolvers-CHEvl4oe.js";import{s,d as t}from"./sender-DL3isFNg.js";import{i as r}from"./i32-C78nBJH2.js";import{b as o}from"./shared-D1EE5wug.js";import"./channel-DQBWE7_E.js";const{promise:a,resolve:n}=e();addEventListener("message",({data:[e,s,t]})=>n([s,t]),{once:!0});const d="async";var i=n=>a.then(([a,d])=>(postMessage(1),((s,a)=>{const n=new BroadcastChannel(s),d=r(),i=(a.decoder??t)({byteOffset:o}),m=new Map;return n.addEventListener("message",({data:[e,{length:s,buffer:t}]})=>{m.get(e)(a.onsync(s?i(s,t):void 0)),m.delete(e)}),(s,...t)=>{const{promise:r,resolve:o}=e(),a=d();return m.set(a,o),n.postMessage([a,s],...t),r}})(d,s({...a,...n}))));export{d as channel,i as default};
@@ -0,0 +1 @@
1
+ import{b as e,S as a,h as s,u as t,p as r}from"./shared-BVwQ7RKn.js";import{S as n}from"./shared-array-buffer-cwdMr2mc.js";import{b as o,r as c}from"./shared-D1EE5wug.js";var d=({initByteLength:e=1024,maxByteLength:a=8192})=>new n(o+e,{maxByteLength:o+a});const p="async";let h=class extends a{constructor(e,a,n){const h=c(),i=new BroadcastChannel(h),m=d(a),g=new Int32Array(m),u=s(m,a,!1);i.addEventListener("message",async({data:[e,a]})=>{await u({data:a}),i.postMessage([e,new Uint8Array(m,o,g[1])])}),super(...t(e,p,a)),super.addEventListener("message",()=>n(this),{once:!0}),super.postMessage(r(m,a).concat(h))}get channel(){return p}};var i=e(h),m=Object.freeze({__proto__:null,Worker:h,default:i});export{d as S,h as W,m as a};
package/dist/async.js CHANGED
@@ -1 +1 @@
1
- const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s=e=>{const t=new Int32Array(1);return()=>t[0]++},n="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:r}=Array,a=e=>e;class o extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=s(),this.#t=new Map,t.onsend||(t.onsend=a),super.addEventListener("message",async e=>{const{data:s}=e;if(r(s)&&s[0]===n){e.stopImmediatePropagation(),e.preventDefault();const[n,r]=s[1],a=this.#t.get(n);this.#t.delete(n),a(await t.onsend(r))}})}send(e,...s){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([n,[r,e]],...s),a}}let{SharedArrayBuffer:c}=globalThis;try{new c(4,{maxByteLength:8})}catch(e){c=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const i=2*Int32Array.BYTES_PER_ELEMENT,d=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0};let u=!0;try{crypto.randomUUID()}catch(e){u=!1}const p=u?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36),y="async";var g=(e=>(s,n)=>{const{promise:r,resolve:a}=t();return new e(s,n,a),r})(class extends o{constructor(e,t,s){const n=p(),r=new BroadcastChannel(n),a=(({initByteLength:e=1024,maxByteLength:t=8192})=>new c(i+e,{maxByteLength:i+t}))(t),o=new Int32Array(a),u=((e,t)=>{const s=new Int32Array(e);return async({data:n})=>{const r=await t.onsync(n),a=r.length,o=i+r.buffer.byteLength;e.byteLength<o&&e.grow(o),s.set(r,2),s[1]=a,s[0]=1}})(a,t);r.addEventListener("message",async({data:[e,t]})=>{await u({data:t}),r.postMessage([e,o.slice(0,2+o[1])])}),super(...((e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]})(e,y,t)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(((e,t)=>{const s={};for(const e in t){const n=t[e];d(e)&&d(n)&&(s[e]=n)}return[e,s]})(a,t).concat(n))}get channel(){return y}});const{isArray:l}=Array;const{promise:h,resolve:m}=t();addEventListener("message",({data:[e,t,s]})=>m([e,t,s]),{once:!0});const w="async";var f="importScripts"in globalThis?e=>h.then(([r,a,o])=>(postMessage(1),((e,n,r)=>{const a=new BroadcastChannel(e),o=s(),c=new Map;return a.addEventListener("message",({data:[e,t]})=>{n.set(t,0),c.get(e)(r.onsync(n.subarray(2,2+n[1]))),c.delete(e)}),(e,...s)=>{const{promise:n,resolve:r}=t(),i=o();return c.set(i,r),a.postMessage([i,e],...s),n}})(o,new Int32Array(r),(e=>(addEventListener("message",async t=>{const{data:s}=t;if(l(s)&&s[0]===n){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=s[1];postMessage([n,[r,await e.onsend(a)]])}}),e))({...a,...e})))):g;export{w as channel,f as default};
1
+ const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s=e=>{const t=new Int32Array(1);return()=>t[0]++},n="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:r}=Array,a=e=>e;class o extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=s(),this.#t=new Map,t.onsend||(t.onsend=a),super.addEventListener("message",async e=>{const{data:s}=e;if(r(s)&&s[0]===n){e.stopImmediatePropagation(),e.preventDefault();const[n,r]=s[1],a=this.#t.get(n);this.#t.delete(n),a(await t.onsend(r))}})}send(e,...s){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([n,[r,e]],...s),a}}let{SharedArrayBuffer:c}=globalThis;try{new c(4,{maxByteLength:8})}catch(e){c=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const i=2*Int32Array.BYTES_PER_ELEMENT;let u=!0;try{crypto.randomUUID()}catch(e){u=!1}const l=u?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36);let h=0;const p=h++,f=h++,y=h++,g=h++,d=h++,b=h++,w=h++,m=h++,v=h++,A=h++,k=h++,S=h++,B=h++,U=h++,M=h++,x=h++,E=h++,L=h++,I=h++,T=h++,O=h++,D=h++,P=h++,F=h++,N=h++,R=h++,j=h++,q=h++;const z=globalThis.ImageData||class{};class _{static push(e,t){e.sync(!1),e._(t,t.length)}constructor(e,t){const s=[];this.l=0,this.o=s,this.v=new Uint8Array(e,t),this.push=s.push.bind(s)}get length(){return this.l+this.o.length}sync(e){const t=this.o,s=t.length;s&&this._(e?t:t.splice(0),s)}_(e,t){const{buffer:s,byteOffset:n}=this.v,r=this.l;this.l+=t,t+=n+r,s.byteLength<t&&s.grow(t),this.v.set(e,r)}}const $=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),C=e=>$.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),J=Object.defineProperty,K=Array.isArray,V=ArrayBuffer.isView,W=new TextDecoder,Y=new TextEncoder,G=new ArrayBuffer(8),H=new DataView(G),Q=new Uint8Array(G),{getPrototypeOf:X}=Object,{construct:Z}=Reflect,{toStringTag:ee}=Symbol,te=(e,t=e[ee])=>t in globalThis?t:te(Z(X(e.constructor),[0])),{isNaN:se,isFinite:ne,isInteger:re}=Number,{ownKeys:ae}=Reflect,{is:oe}=Object,ce=(e,t,s)=>{const n=s.get(e),r=!n;return r?(H.setUint32(0,t.length,!0),s.set(e,[Q[0],Q[1],Q[2],Q[3]])):t.push(q,n[0],n[1],n[2],n[3]),r},ie=(e,t,s)=>{H.setUint32(0,s,!0),e.push(t,Q[0],Q[1],Q[2],Q[3])},ue=(e,t,s)=>{switch(typeof e){case"number":e&&ne(e)?re(e)&&e<256&&-1<e?t.push(b,e):(H.setFloat64(0,e,!0),t.push(d,Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],Q[6],Q[7])):se(e)?t.push(w):e?t.push(e<0?v:m):t.push(oe(e,0)?A:k);break;case"object":switch(!0){case null===e:t.push(g);break;case!ce(e,t,s):break;case K(e):{const n=e.length;ie(t,x,n);for(let r=0;r<n;r++)ue(e[r],t,s);break}case V(e):if(t.push(F),ue(te(e),t,s),e=e.buffer,!ce(e,t,s))break;case e instanceof ArrayBuffer:{const s=new Uint8Array(e);ie(t,E,s.length),he(t,s);break}case e instanceof Date:t.push(L),ue(e.getTime(),t,s);break;case e instanceof Map:ie(t,T,e.size);for(const[n,r]of e)ue(n,t,s),ue(r,t,s);break;case e instanceof Set:ie(t,P,e.size);for(const n of e)ue(n,t,s);break;case e instanceof Error:t.push(I),ue(e.name,t,s),ue(e.message,t,s),ue(e.stack,t,s);break;case e instanceof z:t.push(N),ue(e.data,t,s),ue(e.width,t,s),ue(e.height,t,s),ue(e.colorSpace,t,s),ue(e.pixelFormat,t,s);break;case e instanceof RegExp:t.push(D),ue(e.source,t,s),ue(e.flags,t,s);break;case e instanceof File:t.push(j),ue(e.name,t,s),ue(e.lastModified,t,s);case e instanceof Blob:{const n=e.size;t.push(R),ue(e.type,t,s),ue(n,t,s);const r=t.length;he(t,new Uint8Array(n)),le.push(e.arrayBuffer().then(e=>[r,e]));break}default:if("toJSON"in e){const n=e.toJSON();ue(n===e?null:n,t,s)}else{const n=ae(e),r=n.length;ie(t,O,r);for(let a=0;a<r;a++){const r=n[a];ue(r,t,s),ue(e[r],t,s)}}}break;case"string":if(ce(e,t,s)){const s=Y.encode(e);ie(t,U,s.length),he(t,s)}break;case"boolean":t.push(e?f:p);break;case"symbol":t.push(M),ue(C(e),t,s);break;case"bigint":{let s=S;9223372036854775807n<e?(H.setBigUint64(0,e,!0),s=B):H.setBigInt64(0,e,!0),t.push(s,Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],Q[6],Q[7]);break}default:t.push(y)}},le=[];let he=(e,t)=>{for(let s=e.push,n=0,r=t.length;n<r;n+=32767)s.apply(e,t.subarray(n,n+32767))};const pe=({byteOffset:e=0,Array:t=_}={})=>(s,n)=>{const r=new t(n,e);he=t.push,ue(s,r,new Map);const a=r.length;return r.sync(!0),le.length?Promise.all(le.splice(0)).then(t=>{const s=new Uint8Array(n,e);for(const[e,n]of t)s.set(new Uint8Array(n),e);return a}):a},fe=(e,t,s)=>{const n=new Int32Array(e),r=(t.encoder??pe)({byteOffset:i}),a=e=>{n[1]=e,n[0]=1};return async({data:s})=>(t=>{const s=r(t,e);return"number"==typeof s?a(s):s.then(a)})(await t.onsync(s))},ye=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},ge="async";var de=(e=>(s,n)=>{const{promise:r,resolve:a}=t();return new e(s,n,a),r})(class extends o{constructor(e,t,s){const n=l(),r=new BroadcastChannel(n),a=(({initByteLength:e=1024,maxByteLength:t=8192})=>new c(i+e,{maxByteLength:i+t}))(t),o=new Int32Array(a),u=fe(a,t);r.addEventListener("message",async({data:[e,t]})=>{await u({data:t}),r.postMessage([e,new Uint8Array(a,i,o[1])])}),super(...((e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]})(e,ge,t)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(((e,t)=>{const s={};for(const e in t){const n=t[e];ye(e)&&ye(n)&&(s[e]=n)}return[e,s]})(a,t).concat(n))}get channel(){return ge}});const be=(e,t,s)=>(e.set(t,s),s),we=e=>{Q[0]=e[Ae++],Q[1]=e[Ae++],Q[2]=e[Ae++],Q[3]=e[Ae++],Q[4]=e[Ae++],Q[5]=e[Ae++],Q[6]=e[Ae++],Q[7]=e[Ae++]},me=e=>(Q[0]=e[Ae++],Q[1]=e[Ae++],Q[2]=e[Ae++],Q[3]=e[Ae++],H.getUint32(0,!0)),ve=(e,t)=>{switch(e[Ae++]){case d:return we(e),H.getFloat64(0,!0);case b:return e[Ae++];case O:{const s=be(t,Ae-1,{});for(let n=0,r=me(e);n<r;n++)s[ve(e,t)]=ve(e,t);return s}case x:{const s=be(t,Ae-1,[]);for(let n=0,r=me(e);n<r;n++)s.push(ve(e,t));return s}case F:{const s=Ae-1,n=ve(e,t);return be(t,s,new globalThis[n](ve(e,t)))}case E:{const s=Ae-1,n=me(e);return be(t,s,e.slice(Ae,Ae+=n).buffer)}case U:{const s=Ae-1,n=me(e);return be(t,s,W.decode(e.slice(Ae,Ae+=n)))}case L:return be(t,Ae-1,new Date(ve(e,t)));case T:{const s=be(t,Ae-1,new Map);for(let n=0,r=me(e);n<r;n++)s.set(ve(e,t),ve(e,t));return s}case P:{const s=be(t,Ae-1,new Set);for(let n=0,r=me(e);n<r;n++)s.add(ve(e,t));return s}case I:{const s=ve(e,t),n=ve(e,t),r=ve(e,t),a=new(globalThis[s]||Error)(n);return be(t,Ae-1,J(a,"stack",{value:r}))}case N:{const s=ve(e,t),n=ve(e,t),r=ve(e,t),a=ve(e,t),o=ve(e,t);return be(t,Ae-1,new z(s,n,r,{colorSpace:a,pixelFormat:o}))}case D:{const s=ve(e,t),n=ve(e,t);return be(t,Ae-1,new RegExp(s,n))}case p:return!1;case f:return!0;case w:return NaN;case m:return 1/0;case v:return-1/0;case A:return 0;case k:return-0;case g:return null;case S:return we(e),H.getBigInt64(0,!0);case B:return we(e),H.getBigUint64(0,!0);case M:return(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()}})(ve(e,t));case q:return t.get(me(e));case R:{const s=ve(e,t),n=ve(e,t);return be(t,Ae-1,new Blob([e.slice(Ae,Ae+=n)],{type:s}))}case j:{const s=Ae-1,n=ve(e,t),r=ve(e,t),a=ve(e,t);return be(t,s,new File([a],n,{type:a.type,lastModified:r}))}default:return}};let Ae=0;const ke=({byteOffset:e=0}={})=>(t,s)=>{return n=new Uint8Array(s,e,t),Ae=0,ve(n,new Map);var n},{isArray:Se}=Array;const{promise:Be,resolve:Ue}=t();addEventListener("message",({data:[e,t,s]})=>Ue([t,s]),{once:!0});const Me="async";var xe="importScripts"in globalThis?e=>Be.then(([r,a])=>(postMessage(1),((e,n)=>{const r=new BroadcastChannel(e),a=s(),o=(n.decoder??ke)({byteOffset:i}),c=new Map;return r.addEventListener("message",({data:[e,{length:t,buffer:s}]})=>{c.get(e)(n.onsync(t?o(t,s):void 0)),c.delete(e)}),(e,...s)=>{const{promise:n,resolve:o}=t(),i=a();return c.set(i,o),r.postMessage([i,e],...s),n}})(a,(e=>(addEventListener("message",async t=>{const{data:s}=t;if(Se(s)&&s[0]===n){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=s[1];postMessage([n,[r,await e.onsend(a)]])}}),e))({...r,...e})))):de;export{Me as channel,xe as default};
@@ -0,0 +1 @@
1
+ import{w as r}from"./with-resolvers-CHEvl4oe.js";import{h as s}from"./shared-DPsM-o7V.js";import"./sender-DL3isFNg.js";import"./channel-DQBWE7_E.js";import"./shared-D1EE5wug.js";const{promise:a,resolve:e}=r(),o="broadcast";var t=s(a,({data:[r,s,a]})=>e([r,s,new BroadcastChannel(a)]));export{o as channel,t as default};
@@ -1 +1 @@
1
- import{b as s,S as e,a,h as r,u as t,p as n}from"./shared-MkVjuKUg.js";import{r as o}from"./shared-RFmxa5x4.js";import"./with-resolvers-CHEvl4oe.js";import"./i32-C78nBJH2.js";import"./channel-CdS9bLt4.js";const c="broadcast";var d=s(class extends e{constructor(s,e,d){const p=o(),i=new BroadcastChannel(p),m=a(e);i.addEventListener("message",r(m,e,!0)),super(...t(s,c,e)),super.addEventListener("message",()=>d(this),{once:!0}),super.postMessage(n(m,e).concat(p))}get channel(){return c}});export{d as default};
1
+ import{b as s,S as e,a,h as r,u as t,p as n}from"./shared-BVwQ7RKn.js";import{r as o}from"./shared-D1EE5wug.js";import"./with-resolvers-CHEvl4oe.js";import"./i32-C78nBJH2.js";import"./channel-DQBWE7_E.js";const c="broadcast";var d=s(class extends e{constructor(s,e,d){const p=o(),i=new BroadcastChannel(p),m=a(e);i.addEventListener("message",r(m,e,!0)),super(...t(s,c,e)),super.addEventListener("message",()=>d(this),{once:!0}),super.postMessage(n(m,e).concat(p))}get channel(){return c}});export{d as default};
package/dist/broadcast.js CHANGED
@@ -1 +1 @@
1
- const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:n}=Array,r=e=>e;class a extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=(()=>{const e=new Int32Array(1);return()=>e[0]++})(),this.#t=new Map,t.onsend||(t.onsend=r),super.addEventListener("message",async e=>{const{data:r}=e;if(n(r)&&r[0]===s){e.stopImmediatePropagation(),e.preventDefault();const[s,n]=r[1],a=this.#t.get(s);this.#t.delete(s),a(await t.onsend(n))}})}send(e,...n){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([s,[r,e]],...n),a}}const{notify:o,store:c}=Atomics,i=2*Int32Array.BYTES_PER_ELEMENT,d=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0};let u=!0;try{crypto.randomUUID()}catch(e){u=!1}const p=u?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36),y="broadcast";var h=(e=>(s,n)=>{const{promise:r,resolve:a}=t();return new e(s,n,a),r})(class extends a{constructor(e,t,s){const n=p(),r=new BroadcastChannel(n),a=(({initByteLength:e=1024,maxByteLength:t=8192})=>new SharedArrayBuffer(i+e,{maxByteLength:i+t}))(t);r.addEventListener("message",((e,t)=>{const s=new Int32Array(e);return async({data:n})=>{const r=await t.onsync(n),a=r.length,d=i+r.buffer.byteLength;e.byteLength<d&&e.grow(d),s.set(r,2),c(s,1,a),c(s,0,1),o(s,0)}})(a,t)),super(...((e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]})(e,y,t)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(((e,t)=>{const s={};for(const e in t){const n=t[e];d(e)&&d(n)&&(s[e]=n)}return[e,s]})(a,t).concat(n))}get channel(){return y}});const{isArray:m}=Array;const{load:g,store:l,wait:w}=Atomics,{promise:f,resolve:v}=t(),b="broadcast";var L=((e,t)=>(addEventListener("message",t,{once:!0}),t=>e.then(([e,n,r])=>(postMessage(1),((e,t,s)=>(n,...r)=>(e.postMessage(n,...r),w(t,0,0),l(t,0,0),s.onsync(t.subarray(2,2+g(t,1)))))(r,new Int32Array(e),(e=>(addEventListener("message",async t=>{const{data:n}=t;if(m(n)&&n[0]===s){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=n[1];postMessage([s,[r,await e.onsend(a)]])}}),e))({...n,...t}))))))(f,({data:[e,t,s]})=>v([e,t,new BroadcastChannel(s)])),A="importScripts"in globalThis?L:h;export{b as channel,A as default};
1
+ const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:n}=Array,r=e=>e;class a extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=(()=>{const e=new Int32Array(1);return()=>e[0]++})(),this.#t=new Map,t.onsend||(t.onsend=r),super.addEventListener("message",async e=>{const{data:r}=e;if(n(r)&&r[0]===s){e.stopImmediatePropagation(),e.preventDefault();const[s,n]=r[1],a=this.#t.get(s);this.#t.delete(s),a(await t.onsend(n))}})}send(e,...n){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([s,[r,e]],...n),a}}let o=0;const c=o++,i=o++,u=o++,l=o++,h=o++,f=o++,p=o++,y=o++,d=o++,g=o++,b=o++,w=o++,m=o++,v=o++,A=o++,k=o++,S=o++,B=o++,U=o++,E=o++,M=o++,x=o++,I=o++,L=o++,O=o++,T=o++,D=o++,P=o++;const F=globalThis.ImageData||class{};class N{static push(e,t){e.sync(!1),e._(t,t.length)}constructor(e,t){const s=[];this.l=0,this.o=s,this.v=new Uint8Array(e,t),this.push=s.push.bind(s)}get length(){return this.l+this.o.length}sync(e){const t=this.o,s=t.length;s&&this._(e?t:t.splice(0),s)}_(e,t){const{buffer:s,byteOffset:n}=this.v,r=this.l;this.l+=t,t+=n+r,s.byteLength<t&&s.grow(t),this.v.set(e,r)}}const R=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),j=e=>R.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),q=Object.defineProperty,_=Array.isArray,z=ArrayBuffer.isView,$=new TextDecoder,C=new TextEncoder,J=new ArrayBuffer(8),K=new DataView(J),V=new Uint8Array(J),{getPrototypeOf:W}=Object,{construct:Y}=Reflect,{toStringTag:G}=Symbol,H=(e,t=e[G])=>t in globalThis?t:H(Y(W(e.constructor),[0])),{isNaN:Q,isFinite:X,isInteger:Z}=Number,{ownKeys:ee}=Reflect,{is:te}=Object,se=(e,t,s)=>{const n=s.get(e),r=!n;return r?(K.setUint32(0,t.length,!0),s.set(e,[V[0],V[1],V[2],V[3]])):t.push(P,n[0],n[1],n[2],n[3]),r},ne=(e,t,s)=>{K.setUint32(0,s,!0),e.push(t,V[0],V[1],V[2],V[3])},re=(e,t,s)=>{switch(typeof e){case"number":e&&X(e)?Z(e)&&e<256&&-1<e?t.push(f,e):(K.setFloat64(0,e,!0),t.push(h,V[0],V[1],V[2],V[3],V[4],V[5],V[6],V[7])):Q(e)?t.push(p):e?t.push(e<0?d:y):t.push(te(e,0)?g:b);break;case"object":switch(!0){case null===e:t.push(l);break;case!se(e,t,s):break;case _(e):{const n=e.length;ne(t,k,n);for(let r=0;r<n;r++)re(e[r],t,s);break}case z(e):if(t.push(L),re(H(e),t,s),e=e.buffer,!se(e,t,s))break;case e instanceof ArrayBuffer:{const s=new Uint8Array(e);ne(t,S,s.length),oe(t,s);break}case e instanceof Date:t.push(B),re(e.getTime(),t,s);break;case e instanceof Map:ne(t,E,e.size);for(const[n,r]of e)re(n,t,s),re(r,t,s);break;case e instanceof Set:ne(t,I,e.size);for(const n of e)re(n,t,s);break;case e instanceof Error:t.push(U),re(e.name,t,s),re(e.message,t,s),re(e.stack,t,s);break;case e instanceof F:t.push(O),re(e.data,t,s),re(e.width,t,s),re(e.height,t,s),re(e.colorSpace,t,s),re(e.pixelFormat,t,s);break;case e instanceof RegExp:t.push(x),re(e.source,t,s),re(e.flags,t,s);break;case e instanceof File:t.push(D),re(e.name,t,s),re(e.lastModified,t,s);case e instanceof Blob:{const n=e.size;t.push(T),re(e.type,t,s),re(n,t,s);const r=t.length;oe(t,new Uint8Array(n)),ae.push(e.arrayBuffer().then(e=>[r,e]));break}default:if("toJSON"in e){const n=e.toJSON();re(n===e?null:n,t,s)}else{const n=ee(e),r=n.length;ne(t,M,r);for(let a=0;a<r;a++){const r=n[a];re(r,t,s),re(e[r],t,s)}}}break;case"string":if(se(e,t,s)){const s=C.encode(e);ne(t,v,s.length),oe(t,s)}break;case"boolean":t.push(e?i:c);break;case"symbol":t.push(A),re(j(e),t,s);break;case"bigint":{let s=w;9223372036854775807n<e?(K.setBigUint64(0,e,!0),s=m):K.setBigInt64(0,e,!0),t.push(s,V[0],V[1],V[2],V[3],V[4],V[5],V[6],V[7]);break}default:t.push(u)}},ae=[];let oe=(e,t)=>{for(let s=e.push,n=0,r=t.length;n<r;n+=32767)s.apply(e,t.subarray(n,n+32767))};const ce=({byteOffset:e=0,Array:t=N}={})=>(s,n)=>{const r=new t(n,e);oe=t.push,re(s,r,new Map);const a=r.length;return r.sync(!0),ae.length?Promise.all(ae.splice(0)).then(t=>{const s=new Uint8Array(n,e);for(const[e,n]of t)s.set(new Uint8Array(n),e);return a}):a},ie=2*Int32Array.BYTES_PER_ELEMENT;let ue=!0;try{crypto.randomUUID()}catch(e){ue=!1}const le=ue?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36),{notify:he,store:fe}=Atomics,pe=(e,t,s)=>{const n=new Int32Array(e),r=(t.encoder??ce)({byteOffset:ie}),a=e=>{fe(n,1,e),fe(n,0,1),he(n,0)};return async({data:s})=>(t=>{const s=r(t,e);return"number"==typeof s?a(s):s.then(a)})(await t.onsync(s))},ye=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},de="broadcast";var ge=(e=>(s,n)=>{const{promise:r,resolve:a}=t();return new e(s,n,a),r})(class extends a{constructor(e,t,s){const n=le(),r=new BroadcastChannel(n),a=(({initByteLength:e=1024,maxByteLength:t=8192})=>new SharedArrayBuffer(ie+e,{maxByteLength:ie+t}))(t);r.addEventListener("message",pe(a,t)),super(...((e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]})(e,de,t)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(((e,t)=>{const s={};for(const e in t){const n=t[e];ye(e)&&ye(n)&&(s[e]=n)}return[e,s]})(a,t).concat(n))}get channel(){return de}});const be=(e,t,s)=>(e.set(t,s),s),we=e=>{V[0]=e[Ae++],V[1]=e[Ae++],V[2]=e[Ae++],V[3]=e[Ae++],V[4]=e[Ae++],V[5]=e[Ae++],V[6]=e[Ae++],V[7]=e[Ae++]},me=e=>(V[0]=e[Ae++],V[1]=e[Ae++],V[2]=e[Ae++],V[3]=e[Ae++],K.getUint32(0,!0)),ve=(e,t)=>{switch(e[Ae++]){case h:return we(e),K.getFloat64(0,!0);case f:return e[Ae++];case M:{const s=be(t,Ae-1,{});for(let n=0,r=me(e);n<r;n++)s[ve(e,t)]=ve(e,t);return s}case k:{const s=be(t,Ae-1,[]);for(let n=0,r=me(e);n<r;n++)s.push(ve(e,t));return s}case L:{const s=Ae-1,n=ve(e,t);return be(t,s,new globalThis[n](ve(e,t)))}case S:{const s=Ae-1,n=me(e);return be(t,s,e.slice(Ae,Ae+=n).buffer)}case v:{const s=Ae-1,n=me(e);return be(t,s,$.decode(e.slice(Ae,Ae+=n)))}case B:return be(t,Ae-1,new Date(ve(e,t)));case E:{const s=be(t,Ae-1,new Map);for(let n=0,r=me(e);n<r;n++)s.set(ve(e,t),ve(e,t));return s}case I:{const s=be(t,Ae-1,new Set);for(let n=0,r=me(e);n<r;n++)s.add(ve(e,t));return s}case U:{const s=ve(e,t),n=ve(e,t),r=ve(e,t),a=new(globalThis[s]||Error)(n);return be(t,Ae-1,q(a,"stack",{value:r}))}case O:{const s=ve(e,t),n=ve(e,t),r=ve(e,t),a=ve(e,t),o=ve(e,t);return be(t,Ae-1,new F(s,n,r,{colorSpace:a,pixelFormat:o}))}case x:{const s=ve(e,t),n=ve(e,t);return be(t,Ae-1,new RegExp(s,n))}case c:return!1;case i:return!0;case p:return NaN;case y:return 1/0;case d:return-1/0;case g:return 0;case b:return-0;case l:return null;case w:return we(e),K.getBigInt64(0,!0);case m:return we(e),K.getBigUint64(0,!0);case A:return(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()}})(ve(e,t));case P:return t.get(me(e));case T:{const s=ve(e,t),n=ve(e,t);return be(t,Ae-1,new Blob([e.slice(Ae,Ae+=n)],{type:s}))}case D:{const s=Ae-1,n=ve(e,t),r=ve(e,t),a=ve(e,t);return be(t,s,new File([a],n,{type:a.type,lastModified:r}))}default:return}};let Ae=0;const ke=({byteOffset:e=0}={})=>(t,s)=>{return n=new Uint8Array(s,e,t),Ae=0,ve(n,new Map);var n},{isArray:Se}=Array;const{load:Be,store:Ue,wait:Ee}=Atomics,{promise:Me,resolve:xe}=t(),Ie="broadcast";var Le=((e,t)=>(addEventListener("message",t,{once:!0}),t=>e.then(([e,n,r])=>(postMessage(1),((e,t,s)=>{const n=(s.decoder??ke)({byteOffset:ie}),{buffer:r}=t;return(a,...o)=>{e.postMessage(a,...o),Ee(t,0,0),Ue(t,0,0);const c=Be(t,1);return s.onsync(c?n(c,r):void 0)}})(r,new Int32Array(e),(e=>(addEventListener("message",async t=>{const{data:n}=t;if(Se(n)&&n[0]===s){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=n[1];postMessage([s,[r,await e.onsend(a)]])}}),e))({...n,...t}))))))(Me,({data:[e,t,s]})=>xe([e,t,new BroadcastChannel(s)])),Oe="importScripts"in globalThis?Le:ge;export{Ie as channel,Oe as default};
@@ -0,0 +1 @@
1
+ let a=0;const s=a++,e=a++,r=a++,t=a++,o=a++,l=a++,n=a++,c=a++,y=a++,i=a++,b=a++,f=a++,w=a++,d=a++,m=a++,u=a++,p=a++,S=a++,g=a++,A=a++,h=a++,v=a++,x=a++,D=a++,T=a++,B=a++,V=a++,$=a++;const j=globalThis.ImageData||class{},k=new TextDecoder,E=new TextEncoder,F=new Map(Reflect.ownKeys(Symbol).map(a=>[Symbol[a],`@${String(a)}`])),I=a=>{switch(a[0]){case"@":return Symbol[a.slice(1)];case"#":return Symbol.for(a.slice(1));case"!":return Symbol(a.slice(1));default:return Symbol()}},M=a=>F.get(a)||((a,s)=>void 0===s?"?":void 0===Symbol.keyFor(a)?`!${s}`:`#${s}`)(a,a.description),O=Object.defineProperty,R=Array.isArray,U=ArrayBuffer.isView,q=(a,s)=>{for(let e=a.push,r=0,t=s.length;r<t;r+=32767)e.apply(a,s.subarray(r,r+32767))},K=new ArrayBuffer(8),N=new DataView(K),P=new Uint8Array(K);var Z="fc260aad-4404-43b8-ae9d-2c06554bb294";export{u as A,B,S as D,g as E,V as F,c as I,A as M,t as N,h as O,$ as R,m as S,e as T,l as U,D as V,i as Z,w as a,f as b,b as c,N as d,y as e,I as f,n as g,s as h,v as i,T as j,j as k,O as l,x as m,d as n,k as o,p,o as q,Z as r,r as s,M as t,P as u,E as v,U as w,R as x,q as y};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{w as a}from"./with-resolvers-CHEvl4oe.js";import{n as s}from"./shared-array-buffer-cwdMr2mc.js";let t,e;if("importScripts"in globalThis){let s;const{promise:r,resolve:o}=a(),i=new URL(location).searchParams.get("reflected");t=i,s="message"===i?import("./message-D7s0I-EX.js"):"broadcast"===i?import("./broadcast-Dc7wAEE6.js"):"xhr"===i?import("./xhr-D5y-AocB.js"):import("./async-DF1WaSCr.js"),e=async a=>{const{data:t,ports:e}=await r,{default:o}=await s,i=new Event("message");return i.data=t,i.ports=e,dispatchEvent(i),o(a)},addEventListener("message",o,{once:!0})}else s?"InstallTrigger"in globalThis?(t="broadcast",e=(await import("./broadcast-D0xibjmN.js")).default):(t="message",e=(await import("./message-DoGrs_Ai.js")).default):navigator.serviceWorker?(t="xhr",e=(await import("./xhr-CKCWEqUE.js")).default):(t="async",e=(await import("./async-CKeQT1Lz.js").then(function(a){return a.a})).default);var r=e;export{t as channel,r as default};
1
+ import{w as a}from"./with-resolvers-CHEvl4oe.js";import{n as s}from"./shared-array-buffer-cwdMr2mc.js";let t,e;if("importScripts"in globalThis){let s;const{promise:r,resolve:o}=a(),i=new URL(location).searchParams.get("reflected");t=i,s="message"===i?import("./message-Dt36xGK4.js"):"broadcast"===i?import("./broadcast-BDDwfg2T.js"):"xhr"===i?import("./xhr-1Wu8YOTt.js"):import("./async-CYIlyalV.js"),e=async a=>{const{data:t,ports:e}=await r,{default:o}=await s,i=new Event("message");return i.data=t,i.ports=e,dispatchEvent(i),o(a)},addEventListener("message",o,{once:!0})}else s?"InstallTrigger"in globalThis?(t="broadcast",e=(await import("./broadcast-Dbr-yPNb.js")).default):(t="message",e=(await import("./message-8qL8kOnf.js")).default):navigator.serviceWorker?(t="xhr",e=(await import("./xhr-D0exWC1g.js")).default):(t="async",e=(await import("./async-D2KaG2S3.js").then(function(a){return a.a})).default);var r=e;export{t as channel,r as default};
@@ -0,0 +1 @@
1
+ import{b as s,S as e,a as t,h as r,u as a,p as n}from"./shared-BVwQ7RKn.js";import"./with-resolvers-CHEvl4oe.js";import"./i32-C78nBJH2.js";import"./channel-DQBWE7_E.js";import"./shared-D1EE5wug.js";const o="message";var p=s(class extends e{constructor(s,e,p){const{port1:i,port2:d}=new MessageChannel,c=t(e);i.addEventListener(o,r(c,e,!0)),i.start(),super(...a(s,o,e)),super.addEventListener(o,()=>p(this),{once:!0}),super.postMessage(n(c,e),[d])}get channel(){return o}});export{p as default};
@@ -0,0 +1 @@
1
+ import{w as s}from"./with-resolvers-CHEvl4oe.js";import{h as r}from"./shared-DPsM-o7V.js";import"./sender-DL3isFNg.js";import"./channel-DQBWE7_E.js";import"./shared-D1EE5wug.js";const{promise:e,resolve:o}=s(),a="message";var t=r(e,({data:[s,r],ports:[e]})=>o([s,r,e]));export{a as channel,t as default};
package/dist/message.js CHANGED
@@ -1 +1 @@
1
- const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:n}=Array,r=e=>e;class a extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=(()=>{const e=new Int32Array(1);return()=>e[0]++})(),this.#t=new Map,t.onsend||(t.onsend=r),super.addEventListener("message",async e=>{const{data:r}=e;if(n(r)&&r[0]===s){e.stopImmediatePropagation(),e.preventDefault();const[s,n]=r[1],a=this.#t.get(s);this.#t.delete(s),a(await t.onsend(n))}})}send(e,...n){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([s,[r,e]],...n),a}}const{notify:o,store:c}=Atomics,i=2*Int32Array.BYTES_PER_ELEMENT,d=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},u="message";var p=(e=>(s,n)=>{const{promise:r,resolve:a}=t();return new e(s,n,a),r})(class extends a{constructor(e,t,s){const{port1:n,port2:r}=new MessageChannel,a=(({initByteLength:e=1024,maxByteLength:t=8192})=>new SharedArrayBuffer(i+e,{maxByteLength:i+t}))(t);n.addEventListener(u,((e,t)=>{const s=new Int32Array(e);return async({data:n})=>{const r=await t.onsync(n),a=r.length,d=i+r.buffer.byteLength;e.byteLength<d&&e.grow(d),s.set(r,2),c(s,1,a),c(s,0,1),o(s,0)}})(a,t)),n.start(),super(...((e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]})(e,u,t)),super.addEventListener(u,()=>s(this),{once:!0}),super.postMessage(((e,t)=>{const s={};for(const e in t){const n=t[e];d(e)&&d(n)&&(s[e]=n)}return[e,s]})(a,t),[r])}get channel(){return u}});const{isArray:y}=Array;const{load:g,store:h,wait:m}=Atomics,{promise:l,resolve:f}=t(),v="message";var w=((e,t)=>(addEventListener("message",t,{once:!0}),t=>e.then(([e,n,r])=>(postMessage(1),((e,t,s)=>(n,...r)=>(e.postMessage(n,...r),m(t,0,0),h(t,0,0),s.onsync(t.subarray(2,2+g(t,1)))))(r,new Int32Array(e),(e=>(addEventListener("message",async t=>{const{data:n}=t;if(y(n)&&n[0]===s){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=n[1];postMessage([s,[r,await e.onsend(a)]])}}),e))({...n,...t}))))))(l,({data:[e,t],ports:[s]})=>f([e,t,s])),L="importScripts"in globalThis?w:p;export{v as channel,L as default};
1
+ const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:n}=Array,r=e=>e;class a extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=(()=>{const e=new Int32Array(1);return()=>e[0]++})(),this.#t=new Map,t.onsend||(t.onsend=r),super.addEventListener("message",async e=>{const{data:r}=e;if(n(r)&&r[0]===s){e.stopImmediatePropagation(),e.preventDefault();const[s,n]=r[1],a=this.#t.get(s);this.#t.delete(s),a(await t.onsend(n))}})}send(e,...n){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([s,[r,e]],...n),a}}let o=0;const c=o++,i=o++,u=o++,l=o++,h=o++,p=o++,f=o++,y=o++,g=o++,b=o++,d=o++,w=o++,m=o++,v=o++,A=o++,k=o++,S=o++,B=o++,E=o++,M=o++,U=o++,x=o++,I=o++,L=o++,O=o++,T=o++,P=o++,D=o++;const F=globalThis.ImageData||class{};class N{static push(e,t){e.sync(!1),e._(t,t.length)}constructor(e,t){const s=[];this.l=0,this.o=s,this.v=new Uint8Array(e,t),this.push=s.push.bind(s)}get length(){return this.l+this.o.length}sync(e){const t=this.o,s=t.length;s&&this._(e?t:t.splice(0),s)}_(e,t){const{buffer:s,byteOffset:n}=this.v,r=this.l;this.l+=t,t+=n+r,s.byteLength<t&&s.grow(t),this.v.set(e,r)}}const R=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),j=e=>R.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),q=Object.defineProperty,_=Array.isArray,z=ArrayBuffer.isView,$=new TextDecoder,J=new TextEncoder,K=new ArrayBuffer(8),V=new DataView(K),C=new Uint8Array(K),{getPrototypeOf:W}=Object,{construct:Y}=Reflect,{toStringTag:G}=Symbol,H=(e,t=e[G])=>t in globalThis?t:H(Y(W(e.constructor),[0])),{isNaN:Q,isFinite:X,isInteger:Z}=Number,{ownKeys:ee}=Reflect,{is:te}=Object,se=(e,t,s)=>{const n=s.get(e),r=!n;return r?(V.setUint32(0,t.length,!0),s.set(e,[C[0],C[1],C[2],C[3]])):t.push(D,n[0],n[1],n[2],n[3]),r},ne=(e,t,s)=>{V.setUint32(0,s,!0),e.push(t,C[0],C[1],C[2],C[3])},re=(e,t,s)=>{switch(typeof e){case"number":e&&X(e)?Z(e)&&e<256&&-1<e?t.push(p,e):(V.setFloat64(0,e,!0),t.push(h,C[0],C[1],C[2],C[3],C[4],C[5],C[6],C[7])):Q(e)?t.push(f):e?t.push(e<0?g:y):t.push(te(e,0)?b:d);break;case"object":switch(!0){case null===e:t.push(l);break;case!se(e,t,s):break;case _(e):{const n=e.length;ne(t,k,n);for(let r=0;r<n;r++)re(e[r],t,s);break}case z(e):if(t.push(L),re(H(e),t,s),e=e.buffer,!se(e,t,s))break;case e instanceof ArrayBuffer:{const s=new Uint8Array(e);ne(t,S,s.length),oe(t,s);break}case e instanceof Date:t.push(B),re(e.getTime(),t,s);break;case e instanceof Map:ne(t,M,e.size);for(const[n,r]of e)re(n,t,s),re(r,t,s);break;case e instanceof Set:ne(t,I,e.size);for(const n of e)re(n,t,s);break;case e instanceof Error:t.push(E),re(e.name,t,s),re(e.message,t,s),re(e.stack,t,s);break;case e instanceof F:t.push(O),re(e.data,t,s),re(e.width,t,s),re(e.height,t,s),re(e.colorSpace,t,s),re(e.pixelFormat,t,s);break;case e instanceof RegExp:t.push(x),re(e.source,t,s),re(e.flags,t,s);break;case e instanceof File:t.push(P),re(e.name,t,s),re(e.lastModified,t,s);case e instanceof Blob:{const n=e.size;t.push(T),re(e.type,t,s),re(n,t,s);const r=t.length;oe(t,new Uint8Array(n)),ae.push(e.arrayBuffer().then(e=>[r,e]));break}default:if("toJSON"in e){const n=e.toJSON();re(n===e?null:n,t,s)}else{const n=ee(e),r=n.length;ne(t,U,r);for(let a=0;a<r;a++){const r=n[a];re(r,t,s),re(e[r],t,s)}}}break;case"string":if(se(e,t,s)){const s=J.encode(e);ne(t,v,s.length),oe(t,s)}break;case"boolean":t.push(e?i:c);break;case"symbol":t.push(A),re(j(e),t,s);break;case"bigint":{let s=w;9223372036854775807n<e?(V.setBigUint64(0,e,!0),s=m):V.setBigInt64(0,e,!0),t.push(s,C[0],C[1],C[2],C[3],C[4],C[5],C[6],C[7]);break}default:t.push(u)}},ae=[];let oe=(e,t)=>{for(let s=e.push,n=0,r=t.length;n<r;n+=32767)s.apply(e,t.subarray(n,n+32767))};const ce=({byteOffset:e=0,Array:t=N}={})=>(s,n)=>{const r=new t(n,e);oe=t.push,re(s,r,new Map);const a=r.length;return r.sync(!0),ae.length?Promise.all(ae.splice(0)).then(t=>{const s=new Uint8Array(n,e);for(const[e,n]of t)s.set(new Uint8Array(n),e);return a}):a},ie=2*Int32Array.BYTES_PER_ELEMENT;try{crypto.randomUUID()}catch(e){}const{notify:ue,store:le}=Atomics,he=(e,t,s)=>{const n=new Int32Array(e),r=(t.encoder??ce)({byteOffset:ie}),a=e=>{le(n,1,e),le(n,0,1),ue(n,0)};return async({data:s})=>(t=>{const s=r(t,e);return"number"==typeof s?a(s):s.then(a)})(await t.onsync(s))},pe=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},fe="message";var ye=(e=>(s,n)=>{const{promise:r,resolve:a}=t();return new e(s,n,a),r})(class extends a{constructor(e,t,s){const{port1:n,port2:r}=new MessageChannel,a=(({initByteLength:e=1024,maxByteLength:t=8192})=>new SharedArrayBuffer(ie+e,{maxByteLength:ie+t}))(t);n.addEventListener(fe,he(a,t)),n.start(),super(...((e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]})(e,fe,t)),super.addEventListener(fe,()=>s(this),{once:!0}),super.postMessage(((e,t)=>{const s={};for(const e in t){const n=t[e];pe(e)&&pe(n)&&(s[e]=n)}return[e,s]})(a,t),[r])}get channel(){return fe}});const ge=(e,t,s)=>(e.set(t,s),s),be=e=>{C[0]=e[me++],C[1]=e[me++],C[2]=e[me++],C[3]=e[me++],C[4]=e[me++],C[5]=e[me++],C[6]=e[me++],C[7]=e[me++]},de=e=>(C[0]=e[me++],C[1]=e[me++],C[2]=e[me++],C[3]=e[me++],V.getUint32(0,!0)),we=(e,t)=>{switch(e[me++]){case h:return be(e),V.getFloat64(0,!0);case p:return e[me++];case U:{const s=ge(t,me-1,{});for(let n=0,r=de(e);n<r;n++)s[we(e,t)]=we(e,t);return s}case k:{const s=ge(t,me-1,[]);for(let n=0,r=de(e);n<r;n++)s.push(we(e,t));return s}case L:{const s=me-1,n=we(e,t);return ge(t,s,new globalThis[n](we(e,t)))}case S:{const s=me-1,n=de(e);return ge(t,s,e.slice(me,me+=n).buffer)}case v:{const s=me-1,n=de(e);return ge(t,s,$.decode(e.slice(me,me+=n)))}case B:return ge(t,me-1,new Date(we(e,t)));case M:{const s=ge(t,me-1,new Map);for(let n=0,r=de(e);n<r;n++)s.set(we(e,t),we(e,t));return s}case I:{const s=ge(t,me-1,new Set);for(let n=0,r=de(e);n<r;n++)s.add(we(e,t));return s}case E:{const s=we(e,t),n=we(e,t),r=we(e,t),a=new(globalThis[s]||Error)(n);return ge(t,me-1,q(a,"stack",{value:r}))}case O:{const s=we(e,t),n=we(e,t),r=we(e,t),a=we(e,t),o=we(e,t);return ge(t,me-1,new F(s,n,r,{colorSpace:a,pixelFormat:o}))}case x:{const s=we(e,t),n=we(e,t);return ge(t,me-1,new RegExp(s,n))}case c:return!1;case i:return!0;case f:return NaN;case y:return 1/0;case g:return-1/0;case b:return 0;case d:return-0;case l:return null;case w:return be(e),V.getBigInt64(0,!0);case m:return be(e),V.getBigUint64(0,!0);case A:return(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()}})(we(e,t));case D:return t.get(de(e));case T:{const s=we(e,t),n=we(e,t);return ge(t,me-1,new Blob([e.slice(me,me+=n)],{type:s}))}case P:{const s=me-1,n=we(e,t),r=we(e,t),a=we(e,t);return ge(t,s,new File([a],n,{type:a.type,lastModified:r}))}default:return}};let me=0;const ve=({byteOffset:e=0}={})=>(t,s)=>{return n=new Uint8Array(s,e,t),me=0,we(n,new Map);var n},{isArray:Ae}=Array;const{load:ke,store:Se,wait:Be}=Atomics,{promise:Ee,resolve:Me}=t(),Ue="message";var xe=((e,t)=>(addEventListener("message",t,{once:!0}),t=>e.then(([e,n,r])=>(postMessage(1),((e,t,s)=>{const n=(s.decoder??ve)({byteOffset:ie}),{buffer:r}=t;return(a,...o)=>{e.postMessage(a,...o),Be(t,0,0),Se(t,0,0);const c=ke(t,1);return s.onsync(c?n(c,r):void 0)}})(r,new Int32Array(e),(e=>(addEventListener("message",async t=>{const{data:n}=t;if(Ae(n)&&n[0]===s){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=n[1];postMessage([s,[r,await e.onsend(a)]])}}),e))({...n,...t}))))))(Ee,({data:[e,t],ports:[s]})=>Me([e,t,s])),Ie="importScripts"in globalThis?xe:ye;export{Ue as channel,Ie as default};
@@ -0,0 +1 @@
1
+ import{F as e,B as s,R as a,S as t,f as r,a as n,d as c,b as o,N as u,c as l,Z as i,e as p,I as d,g as f,T as g,h as w,i as y,j as m,k as b,E as h,l as v,m as M,M as A,D as B,n as E,o as F,p as U,V as x,A as D,O as I,U as N,q as S,u as T,r as j}from"./channel-DQBWE7_E.js";const k=(e,s,a)=>(e.set(s,a),a),O=e=>{T[0]=e[L++],T[1]=e[L++],T[2]=e[L++],T[3]=e[L++],T[4]=e[L++],T[5]=e[L++],T[6]=e[L++],T[7]=e[L++]},R=e=>(T[0]=e[L++],T[1]=e[L++],T[2]=e[L++],T[3]=e[L++],c.getUint32(0,!0)),q=(T,j)=>{switch(T[L++]){case S:return O(T),c.getFloat64(0,!0);case N:return T[L++];case I:{const e=k(j,L-1,{});for(let s=0,a=R(T);s<a;s++)e[q(T,j)]=q(T,j);return e}case D:{const e=k(j,L-1,[]);for(let s=0,a=R(T);s<a;s++)e.push(q(T,j));return e}case x:{const e=L-1,s=q(T,j);return k(j,e,new globalThis[s](q(T,j)))}case U:{const e=L-1,s=R(T);return k(j,e,T.slice(L,L+=s).buffer)}case E:{const e=L-1,s=R(T);return k(j,e,F.decode(T.slice(L,L+=s)))}case B:return k(j,L-1,new Date(q(T,j)));case A:{const e=k(j,L-1,new Map);for(let s=0,a=R(T);s<a;s++)e.set(q(T,j),q(T,j));return e}case M:{const e=k(j,L-1,new Set);for(let s=0,a=R(T);s<a;s++)e.add(q(T,j));return e}case h:{const e=q(T,j),s=q(T,j),a=q(T,j),t=new(globalThis[e]||Error)(s);return k(j,L-1,v(t,"stack",{value:a}))}case m:{const e=q(T,j),s=q(T,j),a=q(T,j),t=q(T,j),r=q(T,j);return k(j,L-1,new b(e,s,a,{colorSpace:t,pixelFormat:r}))}case y:{const e=q(T,j),s=q(T,j);return k(j,L-1,new RegExp(e,s))}case w:return!1;case g:return!0;case f:return NaN;case d:return 1/0;case p:return-1/0;case i:return 0;case l:return-0;case u:return null;case o:return O(T),c.getBigInt64(0,!0);case n:return O(T),c.getBigUint64(0,!0);case t:return r(q(T,j));case a:return j.get(R(T));case s:{const e=q(T,j),s=q(T,j);return k(j,L-1,new Blob([T.slice(L,L+=s)],{type:e}))}case e:{const e=L-1,s=q(T,j),a=q(T,j),t=q(T,j);return k(j,e,new File([t],s,{type:t.type,lastModified:a}))}default:return}};let L=0;const P=({byteOffset:e=0}={})=>(s,a)=>{return t=new Uint8Array(a,e,s),L=0,q(t,new Map);var t},{isArray:V}=Array;var Z=e=>(addEventListener("message",async s=>{const{data:a}=s;if(V(a)&&a[0]===j){s.stopImmediatePropagation(),s.preventDefault();const[t,r]=a[1];postMessage([j,[t,await e.onsend(r)]])}}),e);export{P as d,Z as s};
@@ -0,0 +1 @@
1
+ import{w as s}from"./with-resolvers-CHEvl4oe.js";import{i as e}from"./i32-C78nBJH2.js";import{r as t,s as a,d as n,b as r,u as o,S as c,t as i,T as h,h as u,v as f,n as l,B as p,F as b,i as g,k as y,j as m,E as d,m as w,M as k,D as A,p as x,w as B,V as U,x as v,N as O,U as S,q as j,g as q,Z as L,c as M,e as N,I as F,R as I,y as R,a as E,O as P,A as T}from"./channel-DQBWE7_E.js";import{b as z}from"./shared-D1EE5wug.js";const{isArray:D}=Array,_=s=>s;class J extends Worker{#s;#e;constructor(s,a){super(s,a),this.#s=e(),this.#e=new Map,a.onsend||(a.onsend=_),super.addEventListener("message",async s=>{const{data:e}=s;if(D(e)&&e[0]===t){s.stopImmediatePropagation(),s.preventDefault();const[t,n]=e[1],r=this.#e.get(t);this.#e.delete(t),r(await a.onsend(n))}})}send(e,...a){const n=this.#s(),{promise:r,resolve:o}=s();return this.#e.set(n,o),super.postMessage([t,[n,e]],...a),r}}class K{static push(s,e){s.sync(!1),s._(e,e.length)}constructor(s,e){const t=[];this.l=0,this.o=t,this.v=new Uint8Array(s,e),this.push=t.push.bind(t)}get length(){return this.l+this.o.length}sync(s){const e=this.o,t=e.length;t&&this._(s?e:e.splice(0),t)}_(s,e){const{buffer:t,byteOffset:a}=this.v,n=this.l;this.l+=e,e+=a+n,t.byteLength<e&&t.grow(e),this.v.set(s,n)}}const{getPrototypeOf:V}=Object,{construct:W}=Reflect,{toStringTag:Z}=Symbol,C=(s,e=s[Z])=>e in globalThis?e:C(W(V(s.constructor),[0])),{isNaN:G,isFinite:H,isInteger:Q}=Number,{ownKeys:X}=Reflect,{is:Y}=Object,$=(s,e,t)=>{const a=t.get(s),r=!a;return r?(n.setUint32(0,e.length,!0),t.set(s,[o[0],o[1],o[2],o[3]])):e.push(I,a[0],a[1],a[2],a[3]),r},ss=(s,e,t)=>{n.setUint32(0,t,!0),s.push(e,o[0],o[1],o[2],o[3])},es=(s,e,t)=>{switch(typeof s){case"number":s&&H(s)?Q(s)&&s<256&&-1<s?e.push(S,s):(n.setFloat64(0,s,!0),e.push(j,o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7])):G(s)?e.push(q):s?e.push(s<0?N:F):e.push(Y(s,0)?L:M);break;case"object":switch(!0){case null===s:e.push(O);break;case!$(s,e,t):break;case v(s):{const a=s.length;ss(e,T,a);for(let n=0;n<a;n++)es(s[n],e,t);break}case B(s):if(e.push(U),es(C(s),e,t),s=s.buffer,!$(s,e,t))break;case s instanceof ArrayBuffer:{const t=new Uint8Array(s);ss(e,x,t.length),as(e,t);break}case s instanceof Date:e.push(A),es(s.getTime(),e,t);break;case s instanceof Map:ss(e,k,s.size);for(const[a,n]of s)es(a,e,t),es(n,e,t);break;case s instanceof Set:ss(e,w,s.size);for(const a of s)es(a,e,t);break;case s instanceof Error:e.push(d),es(s.name,e,t),es(s.message,e,t),es(s.stack,e,t);break;case s instanceof y:e.push(m),es(s.data,e,t),es(s.width,e,t),es(s.height,e,t),es(s.colorSpace,e,t),es(s.pixelFormat,e,t);break;case s instanceof RegExp:e.push(g),es(s.source,e,t),es(s.flags,e,t);break;case s instanceof File:e.push(b),es(s.name,e,t),es(s.lastModified,e,t);case s instanceof Blob:{const a=s.size;e.push(p),es(s.type,e,t),es(a,e,t);const n=e.length;as(e,new Uint8Array(a)),ts.push(s.arrayBuffer().then(s=>[n,s]));break}default:if("toJSON"in s){const a=s.toJSON();es(a===s?null:a,e,t)}else{const a=X(s),n=a.length;ss(e,P,n);for(let r=0;r<n;r++){const n=a[r];es(n,e,t),es(s[n],e,t)}}}break;case"string":if($(s,e,t)){const t=f.encode(s);ss(e,l,t.length),as(e,t)}break;case"boolean":e.push(s?h:u);break;case"symbol":e.push(c),es(i(s),e,t);break;case"bigint":{let t=r;9223372036854775807n<s?(n.setBigUint64(0,s,!0),t=E):n.setBigInt64(0,s,!0),e.push(t,o[0],o[1],o[2],o[3],o[4],o[5],o[6],o[7]);break}default:e.push(a)}},ts=[];let as=R;const ns=({byteOffset:s=0,Array:e=K}={})=>(t,a)=>{const n=new e(a,s);as=e.push,es(t,n,new Map);const r=n.length;return n.sync(!0),ts.length?Promise.all(ts.splice(0)).then(e=>{const t=new Uint8Array(a,s);for(const[s,a]of e)t.set(new Uint8Array(a),s);return r}):r},{notify:rs,store:os}=Atomics,cs=({initByteLength:s=1024,maxByteLength:e=8192})=>new SharedArrayBuffer(z+s,{maxByteLength:z+e}),is=e=>(t,a)=>{const{promise:n,resolve:r}=s();return new e(t,a,r),n},hs=(s,e,t)=>{const a=new Int32Array(s),n=(e.encoder??ns)({byteOffset:z}),r=t?s=>{os(a,1,s),os(a,0,1),rs(a,0)}:s=>{a[1]=s,a[0]=1};return async({data:t})=>(e=>{const t=n(e,s);return"number"==typeof t?r(t):t.then(r)})(await e.onsync(t))},us=s=>{switch(typeof s){case"symbol":case"function":return!1}return!0},fs=(s,e)=>{const t={};for(const s in e){const a=e[s];us(s)&&us(a)&&(t[s]=a)}return[s,t]},ls=(s,e,t)=>{const a=new URL(s,location.href);return a.searchParams.set("reflected",e),[a,{...t,type:"module"}]};export{J as S,cs as a,is as b,hs as h,fs as p,ls as u};
@@ -0,0 +1 @@
1
+ const t=2*Int32Array.BYTES_PER_ELEMENT;let r=!0;try{crypto.randomUUID()}catch(t){r=!1}const o=r?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36);export{t as b,o as r};
@@ -0,0 +1 @@
1
+ import{s as e,d as s}from"./sender-DL3isFNg.js";import{b as t}from"./shared-D1EE5wug.js";const{load:o,store:r,wait:n}=Atomics,a=(a,d)=>(addEventListener("message",d,{once:!0}),d=>a.then(([a,c,f])=>(postMessage(1),((e,a,d)=>{const c=(d.decoder??s)({byteOffset:t}),{buffer:f}=a;return(s,...t)=>{e.postMessage(s,...t),n(a,0,0),r(a,0,0);const i=o(a,1);return d.onsync(i?c(i,f):void 0)}})(f,new Int32Array(a),e({...c,...d})))));export{a as h};
package/dist/sw.js CHANGED
@@ -1 +1 @@
1
- const e=Promise.withResolvers||function(){var e,t,n=new this((n,s)=>{e=n,t=s});return{resolve:e,reject:t,promise:n}};var t=e.bind(Promise);const[n,s]=((e=e=>e)=>{const n=new Map,s=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let a;do{a=e(s())}while(n.has(a));const r=t();return n.set(a,r),[a,r.promise]},(e,t,s)=>{const a=n.get(e);n.delete(e),s?a?.reject(s):a?.resolve(t)}]})(),{protocol:a,host:r,pathname:o}=location,i=`${a}//${r}${o}`,c=new BroadcastChannel("fc260aad-4404-43b8-ae9d-2c06554bb294");c.addEventListener("message",({data:[e,t]})=>{if("response"===e){const[e,n]=t;s(e,`[${n.join(",")}]`)}});const d=async e=>{const[t,s]=n();return c.postMessage(["request",[t,e]]),new Response(await s)};addEventListener("activate",e=>e.waitUntil(clients.claim())),addEventListener("fetch",async e=>{const{request:t}=e;"POST"===t.method&&t.url.startsWith(i)&&(e.stopImmediatePropagation(),e.respondWith(t.json().then(d)),e.preventDefault())}),addEventListener("install",()=>skipWaiting());
1
+ const e=Promise.withResolvers||function(){var e,t,n=new this((n,s)=>{e=n,t=s});return{resolve:e,reject:t,promise:n}};var t=e.bind(Promise);const[n,s]=((e=e=>e)=>{const n=new Map,s=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let a;do{a=e(s())}while(n.has(a));const o=t();return n.set(a,o),[a,o.promise]},(e,t,s)=>{const a=n.get(e);n.delete(e),s?a?.reject(s):a?.resolve(t)}]})(),{protocol:a,host:o,pathname:r}=location,i=`${a}//${o}${r}`,c=new BroadcastChannel("fc260aad-4404-43b8-ae9d-2c06554bb294");c.addEventListener("message",({data:[e,t]})=>{if("response"===e){const[e,n]=t;s(e,`[${n.join(",")}]`)}});const d={status:200,statusText:"OK",headers:new Headers({"Cache-Control":"no-cache, must-revalidate",Expires:"Mon, 26 Jul 1997 05:00:00 GMT","Content-type":"application/json"})},l=async e=>{const[t,s]=n();return c.postMessage(["request",[t,e]]),new Response(await s,d)};addEventListener("activate",e=>e.waitUntil(clients.claim())),addEventListener("fetch",async e=>{const{request:t}=e;"POST"===t.method&&t.url.startsWith(i)&&(e.stopImmediatePropagation(),e.respondWith(t.json().then(l)),e.preventDefault())}),addEventListener("install",()=>skipWaiting());
@@ -0,0 +1 @@
1
+ import{w as e}from"./with-resolvers-CHEvl4oe.js";import{s,d as t}from"./sender-DL3isFNg.js";import{i as n}from"./i32-C78nBJH2.js";import"./channel-DQBWE7_E.js";const{parse:r,stringify:o}=JSON,{promise:a,resolve:i}=e();addEventListener("message",({data:[e,s,t]})=>i([s,t]),{once:!0});const p="xhr";var c=e=>a.then(([a,i])=>(postMessage(1),((e,s)=>{const a=new BroadcastChannel(e),i=n(),p=(s.decoder??t)({byteOffset:0}),{serviceWorker:c}=s;return(t,...n)=>{const d=i();a.postMessage([d,t],...n);const f=new XMLHttpRequest;f.open("POST",c,!1),f.setRequestHeader("Content-Type","application/json"),f.send(o([d,e]));const{length:m,buffer:l}=new Uint8Array(r(f.responseText));return s.onsync(m?p(m,l):void 0)}})(i,s({...a,...e}))));export{p as channel,c as default};
@@ -0,0 +1 @@
1
+ import{w as e}from"./with-resolvers-CHEvl4oe.js";import{W as t,S as s}from"./async-D2KaG2S3.js";import{r}from"./channel-DQBWE7_E.js";import{S as n,h as a,u as o,p as i}from"./shared-BVwQ7RKn.js";import{r as c,b as l}from"./shared-D1EE5wug.js";import"./shared-array-buffer-cwdMr2mc.js";import"./i32-C78nBJH2.js";const d=new Map,h=new BroadcastChannel(r);h.addEventListener("message",async({data:[e,t]})=>{if("request"===e){const[e,[s,r]]=t,n=d.get(r);if(n){const t=n.get(s);n.delete(s),h.postMessage(["response",[e,await t]])}}});const{promise:p,resolve:f}=e();let m=!0;const u=(e,t)=>{let s,r=!0,{url:n}=t;e.getRegistration(n).then(s=>s??e.register(n,t)).then(function a(o){const{controller:i}=e;if(r=r&&!!i,s=o.installing||o.waiting||o.active,!s)return u(e,t);if("activated"===s.state){if(r){if(i.scriptURL===n)return f();o.unregister()}location.reload()}else s.addEventListener("statechange",()=>a(o),{once:!0})})};class g extends n{#e;constructor(r,n,h){if(m){m=!1;let{serviceWorker:e}=n;if(!e)return new t(r,n,h);"string"==typeof e&&(e={url:e}),e.url=new URL(e.url,location.href).href,u(navigator.serviceWorker,e)}const p=c(),f=new BroadcastChannel(p),g=s(n),v=new Map,w=new Int32Array(g),j=a(g,n,!1);d.set(p,v),f.addEventListener("message",async({data:[t,s]})=>{const{promise:r,resolve:n}=e();v.set(t,r),await j({data:s}),n(new Uint8Array(g,l,w[1]))}),super(...o(r,"xhr",n)),super.addEventListener("message",()=>h(this),{once:!0}),super.postMessage(i(g,n).concat(p)),this.#e=p}terminate(){d.delete(this.#e),super.terminate()}get channel(){return"xhr"}}var v=(s,r)=>{const{promise:n,resolve:a}=e();return new g(s,r,a)instanceof t?n:p.then(()=>n)};export{v as default};
package/dist/xhr.js CHANGED
@@ -1 +1 @@
1
- const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s=e=>{const t=new Int32Array(1);return()=>t[0]++},n="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:r}=Array,a=e=>e;class o extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=s(),this.#t=new Map,t.onsend||(t.onsend=a),super.addEventListener("message",async e=>{const{data:s}=e;if(r(s)&&s[0]===n){e.stopImmediatePropagation(),e.preventDefault();const[n,r]=s[1],a=this.#t.get(n);this.#t.delete(n),a(await t.onsend(r))}})}send(e,...s){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([n,[r,e]],...s),a}}let{SharedArrayBuffer:c}=globalThis;try{new c(4,{maxByteLength:8})}catch(e){c=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const i=2*Int32Array.BYTES_PER_ELEMENT,d=(e,t,s)=>{const n=new Int32Array(e);return async({data:s})=>{const r=await t.onsync(s),a=r.length,o=i+r.buffer.byteLength;e.byteLength<o&&e.grow(o),n.set(r,2),n[1]=a,n[0]=1}},l=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},u=(e,t)=>{const s={};for(const e in t){const n=t[e];l(e)&&l(n)&&(s[e]=n)}return[e,s]},p=(e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]};var g=({initByteLength:e=1024,maxByteLength:t=8192})=>new c(i+e,{maxByteLength:i+t});let h=!0;try{crypto.randomUUID()}catch(e){h=!1}const y=h?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36),w="async";let m=class extends o{constructor(e,t,s){const n=y(),r=new BroadcastChannel(n),a=g(t),o=new Int32Array(a),c=d(a,t);r.addEventListener("message",async({data:[e,t]})=>{await c({data:t}),r.postMessage([e,o.slice(0,2+o[1])])}),super(...p(e,w,t)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(u(a,t).concat(n))}get channel(){return w}};const f=new Map,v=new BroadcastChannel(n);v.addEventListener("message",async({data:[e,t]})=>{if("request"===e){const[e,[s,n]]=t,r=f.get(n);r&&(v.postMessage(["response",[e,await r.get(s)]]),r.delete(s))}});const{promise:L,resolve:x}=t();let E=!0;const M=(e,t)=>{let s,n=!0,{url:r}=t;e.getRegistration(r).then(s=>s??e.register(r,t)).then(function a(o){const{controller:c}=e;if(n=n&&!!c,s=o.installing||o.waiting||o.active,!s)return M(e,t);if("activated"===s.state){if(n){if(c.scriptURL===r)return x();o.unregister()}location.reload()}else s.addEventListener("statechange",()=>a(o),{once:!0})})};let b=class extends o{#s;constructor(e,s,n){if(E){E=!1;let{serviceWorker:t}=s;if(!t)return new m(e,s,n);"string"==typeof t&&(t={url:t}),t.url=new URL(t.url,location.href).href,M(navigator.serviceWorker,t)}const r=y(),a=new BroadcastChannel(r),o=g(s),c=new Map,i=new Int32Array(o),l=d(o,s);f.set(r,c),a.addEventListener("message",async({data:[e,s]})=>{const{promise:n,resolve:r}=t();c.set(e,n),await l({data:s}),r(i.slice(0,2+i[1]))}),super(...p(e,"xhr",s)),super.addEventListener("message",()=>n(this),{once:!0}),super.postMessage(u(o,s).concat(r)),this.#s=r}terminate(){f.delete(this.#s),super.terminate()}get channel(){return"xhr"}};const{isArray:A}=Array;const{parse:B,stringify:I}=JSON,{promise:q,resolve:R}=t();addEventListener("message",({data:[e,t,s]})=>R([e,t,s]),{once:!0});const P="xhr";var T="importScripts"in globalThis?e=>q.then(([t,r,a])=>(postMessage(1),((e,t,n)=>{const r=new BroadcastChannel(e),a=s(),{serviceWorker:o}=n;return(s,...c)=>{const i=a();r.postMessage([i,s],...c);const d=new XMLHttpRequest;return d.open("POST",o,!1),d.setRequestHeader("Content-Type","application/json"),d.send(I([i,e])),t.set(B(d.responseText),0),n.onsync(t.subarray(2,2+t[1]))}})(a,new Int32Array(t),(e=>(addEventListener("message",async t=>{const{data:s}=t;if(A(s)&&s[0]===n){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=s[1];postMessage([n,[r,await e.onsend(a)]])}}),e))({...r,...e})))):(e,s)=>{const{promise:n,resolve:r}=t();return new b(e,s,r)instanceof m?n:L.then(()=>n)};export{P as channel,T as default};
1
+ const e=Promise.withResolvers||function(){var e,t,s=new this((s,n)=>{e=s,t=n});return{resolve:e,reject:t,promise:s}};var t=e.bind(Promise),s=e=>{const t=new Int32Array(1);return()=>t[0]++},n="fc260aad-4404-43b8-ae9d-2c06554bb294";const{isArray:r}=Array,a=e=>e;class o extends Worker{#e;#t;constructor(e,t){super(e,t),this.#e=s(),this.#t=new Map,t.onsend||(t.onsend=a),super.addEventListener("message",async e=>{const{data:s}=e;if(r(s)&&s[0]===n){e.stopImmediatePropagation(),e.preventDefault();const[n,r]=s[1],a=this.#t.get(n);this.#t.delete(n),a(await t.onsend(r))}})}send(e,...s){const r=this.#e(),{promise:a,resolve:o}=t();return this.#t.set(r,o),super.postMessage([n,[r,e]],...s),a}}let{SharedArrayBuffer:c}=globalThis;try{new c(4,{maxByteLength:8})}catch(e){c=class extends ArrayBuffer{get growable(){return super.resizable}grow(e){super.resize(e)}}}const i=2*Int32Array.BYTES_PER_ELEMENT;let l=!0;try{crypto.randomUUID()}catch(e){l=!1}const u=l?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36);var h=({initByteLength:e=1024,maxByteLength:t=8192})=>new c(i+e,{maxByteLength:i+t});let p=0;const f=p++,g=p++,d=p++,y=p++,w=p++,b=p++,m=p++,v=p++,A=p++,k=p++,S=p++,U=p++,x=p++,B=p++,M=p++,E=p++,L=p++,T=p++,I=p++,O=p++,R=p++,D=p++,P=p++,N=p++,q=p++,F=p++,j=p++,z=p++;const C=globalThis.ImageData||class{};class _{static push(e,t){e.sync(!1),e._(t,t.length)}constructor(e,t){const s=[];this.l=0,this.o=s,this.v=new Uint8Array(e,t),this.push=s.push.bind(s)}get length(){return this.l+this.o.length}sync(e){const t=this.o,s=t.length;s&&this._(e?t:t.splice(0),s)}_(e,t){const{buffer:s,byteOffset:n}=this.v,r=this.l;this.l+=t,t+=n+r,s.byteLength<t&&s.grow(t),this.v.set(e,r)}}const W=new Map(Reflect.ownKeys(Symbol).map(e=>[Symbol[e],`@${String(e)}`])),J=e=>W.get(e)||((e,t)=>void 0===t?"?":void 0===Symbol.keyFor(e)?`!${t}`:`#${t}`)(e,e.description),$=Object.defineProperty,H=Array.isArray,K=ArrayBuffer.isView,V=new TextDecoder,X=new TextEncoder,Y=new ArrayBuffer(8),G=new DataView(Y),Q=new Uint8Array(Y),{getPrototypeOf:Z}=Object,{construct:ee}=Reflect,{toStringTag:te}=Symbol,se=(e,t=e[te])=>t in globalThis?t:se(ee(Z(e.constructor),[0])),{isNaN:ne,isFinite:re,isInteger:ae}=Number,{ownKeys:oe}=Reflect,{is:ce}=Object,ie=(e,t,s)=>{const n=s.get(e),r=!n;return r?(G.setUint32(0,t.length,!0),s.set(e,[Q[0],Q[1],Q[2],Q[3]])):t.push(z,n[0],n[1],n[2],n[3]),r},le=(e,t,s)=>{G.setUint32(0,s,!0),e.push(t,Q[0],Q[1],Q[2],Q[3])},ue=(e,t,s)=>{switch(typeof e){case"number":e&&re(e)?ae(e)&&e<256&&-1<e?t.push(b,e):(G.setFloat64(0,e,!0),t.push(w,Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],Q[6],Q[7])):ne(e)?t.push(m):e?t.push(e<0?A:v):t.push(ce(e,0)?k:S);break;case"object":switch(!0){case null===e:t.push(y);break;case!ie(e,t,s):break;case H(e):{const n=e.length;le(t,E,n);for(let r=0;r<n;r++)ue(e[r],t,s);break}case K(e):if(t.push(N),ue(se(e),t,s),e=e.buffer,!ie(e,t,s))break;case e instanceof ArrayBuffer:{const s=new Uint8Array(e);le(t,L,s.length),pe(t,s);break}case e instanceof Date:t.push(T),ue(e.getTime(),t,s);break;case e instanceof Map:le(t,O,e.size);for(const[n,r]of e)ue(n,t,s),ue(r,t,s);break;case e instanceof Set:le(t,P,e.size);for(const n of e)ue(n,t,s);break;case e instanceof Error:t.push(I),ue(e.name,t,s),ue(e.message,t,s),ue(e.stack,t,s);break;case e instanceof C:t.push(q),ue(e.data,t,s),ue(e.width,t,s),ue(e.height,t,s),ue(e.colorSpace,t,s),ue(e.pixelFormat,t,s);break;case e instanceof RegExp:t.push(D),ue(e.source,t,s),ue(e.flags,t,s);break;case e instanceof File:t.push(j),ue(e.name,t,s),ue(e.lastModified,t,s);case e instanceof Blob:{const n=e.size;t.push(F),ue(e.type,t,s),ue(n,t,s);const r=t.length;pe(t,new Uint8Array(n)),he.push(e.arrayBuffer().then(e=>[r,e]));break}default:if("toJSON"in e){const n=e.toJSON();ue(n===e?null:n,t,s)}else{const n=oe(e),r=n.length;le(t,R,r);for(let a=0;a<r;a++){const r=n[a];ue(r,t,s),ue(e[r],t,s)}}}break;case"string":if(ie(e,t,s)){const s=X.encode(e);le(t,B,s.length),pe(t,s)}break;case"boolean":t.push(e?g:f);break;case"symbol":t.push(M),ue(J(e),t,s);break;case"bigint":{let s=U;9223372036854775807n<e?(G.setBigUint64(0,e,!0),s=x):G.setBigInt64(0,e,!0),t.push(s,Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],Q[6],Q[7]);break}default:t.push(d)}},he=[];let pe=(e,t)=>{for(let s=e.push,n=0,r=t.length;n<r;n+=32767)s.apply(e,t.subarray(n,n+32767))};const fe=({byteOffset:e=0,Array:t=_}={})=>(s,n)=>{const r=new t(n,e);pe=t.push,ue(s,r,new Map);const a=r.length;return r.sync(!0),he.length?Promise.all(he.splice(0)).then(t=>{const s=new Uint8Array(n,e);for(const[e,n]of t)s.set(new Uint8Array(n),e);return a}):a},ge=(e,t,s)=>{const n=new Int32Array(e),r=(t.encoder??fe)({byteOffset:i}),a=e=>{n[1]=e,n[0]=1};return async({data:s})=>(t=>{const s=r(t,e);return"number"==typeof s?a(s):s.then(a)})(await t.onsync(s))},de=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},ye=(e,t)=>{const s={};for(const e in t){const n=t[e];de(e)&&de(n)&&(s[e]=n)}return[e,s]},we=(e,t,s)=>{const n=new URL(e,location.href);return n.searchParams.set("reflected",t),[n,{...s,type:"module"}]},be="async";let me=class extends o{constructor(e,t,s){const n=u(),r=new BroadcastChannel(n),a=h(t),o=new Int32Array(a),c=ge(a,t);r.addEventListener("message",async({data:[e,t]})=>{await c({data:t}),r.postMessage([e,new Uint8Array(a,i,o[1])])}),super(...we(e,be,t)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(ye(a,t).concat(n))}get channel(){return be}};const ve=new Map,Ae=new BroadcastChannel(n);Ae.addEventListener("message",async({data:[e,t]})=>{if("request"===e){const[e,[s,n]]=t,r=ve.get(n);if(r){const t=r.get(s);r.delete(s),Ae.postMessage(["response",[e,await t]])}}});const{promise:ke,resolve:Se}=t();let Ue=!0;const xe=(e,t)=>{let s,n=!0,{url:r}=t;e.getRegistration(r).then(s=>s??e.register(r,t)).then(function a(o){const{controller:c}=e;if(n=n&&!!c,s=o.installing||o.waiting||o.active,!s)return xe(e,t);if("activated"===s.state){if(n){if(c.scriptURL===r)return Se();o.unregister()}location.reload()}else s.addEventListener("statechange",()=>a(o),{once:!0})})};let Be=class extends o{#s;constructor(e,s,n){if(Ue){Ue=!1;let{serviceWorker:t}=s;if(!t)return new me(e,s,n);"string"==typeof t&&(t={url:t}),t.url=new URL(t.url,location.href).href,xe(navigator.serviceWorker,t)}const r=u(),a=new BroadcastChannel(r),o=h(s),c=new Map,l=new Int32Array(o),p=ge(o,s);ve.set(r,c),a.addEventListener("message",async({data:[e,s]})=>{const{promise:n,resolve:r}=t();c.set(e,n),await p({data:s}),r(new Uint8Array(o,i,l[1]))}),super(...we(e,"xhr",s)),super.addEventListener("message",()=>n(this),{once:!0}),super.postMessage(ye(o,s).concat(r)),this.#s=r}terminate(){ve.delete(this.#s),super.terminate()}get channel(){return"xhr"}};const Me=(e,t,s)=>(e.set(t,s),s),Ee=e=>{Q[0]=e[Ie++],Q[1]=e[Ie++],Q[2]=e[Ie++],Q[3]=e[Ie++],Q[4]=e[Ie++],Q[5]=e[Ie++],Q[6]=e[Ie++],Q[7]=e[Ie++]},Le=e=>(Q[0]=e[Ie++],Q[1]=e[Ie++],Q[2]=e[Ie++],Q[3]=e[Ie++],G.getUint32(0,!0)),Te=(e,t)=>{switch(e[Ie++]){case w:return Ee(e),G.getFloat64(0,!0);case b:return e[Ie++];case R:{const s=Me(t,Ie-1,{});for(let n=0,r=Le(e);n<r;n++)s[Te(e,t)]=Te(e,t);return s}case E:{const s=Me(t,Ie-1,[]);for(let n=0,r=Le(e);n<r;n++)s.push(Te(e,t));return s}case N:{const s=Ie-1,n=Te(e,t);return Me(t,s,new globalThis[n](Te(e,t)))}case L:{const s=Ie-1,n=Le(e);return Me(t,s,e.slice(Ie,Ie+=n).buffer)}case B:{const s=Ie-1,n=Le(e);return Me(t,s,V.decode(e.slice(Ie,Ie+=n)))}case T:return Me(t,Ie-1,new Date(Te(e,t)));case O:{const s=Me(t,Ie-1,new Map);for(let n=0,r=Le(e);n<r;n++)s.set(Te(e,t),Te(e,t));return s}case P:{const s=Me(t,Ie-1,new Set);for(let n=0,r=Le(e);n<r;n++)s.add(Te(e,t));return s}case I:{const s=Te(e,t),n=Te(e,t),r=Te(e,t),a=new(globalThis[s]||Error)(n);return Me(t,Ie-1,$(a,"stack",{value:r}))}case q:{const s=Te(e,t),n=Te(e,t),r=Te(e,t),a=Te(e,t),o=Te(e,t);return Me(t,Ie-1,new C(s,n,r,{colorSpace:a,pixelFormat:o}))}case D:{const s=Te(e,t),n=Te(e,t);return Me(t,Ie-1,new RegExp(s,n))}case f:return!1;case g:return!0;case m:return NaN;case v:return 1/0;case A:return-1/0;case k:return 0;case S:return-0;case y:return null;case U:return Ee(e),G.getBigInt64(0,!0);case x:return Ee(e),G.getBigUint64(0,!0);case M:return(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()}})(Te(e,t));case z:return t.get(Le(e));case F:{const s=Te(e,t),n=Te(e,t);return Me(t,Ie-1,new Blob([e.slice(Ie,Ie+=n)],{type:s}))}case j:{const s=Ie-1,n=Te(e,t),r=Te(e,t),a=Te(e,t);return Me(t,s,new File([a],n,{type:a.type,lastModified:r}))}default:return}};let Ie=0;const Oe=({byteOffset:e=0}={})=>(t,s)=>{return n=new Uint8Array(s,e,t),Ie=0,Te(n,new Map);var n},{isArray:Re}=Array;const{parse:De,stringify:Pe}=JSON,{promise:Ne,resolve:qe}=t();addEventListener("message",({data:[e,t,s]})=>qe([t,s]),{once:!0});const Fe="xhr";var je="importScripts"in globalThis?e=>Ne.then(([t,r])=>(postMessage(1),((e,t)=>{const n=new BroadcastChannel(e),r=s(),a=(t.decoder??Oe)({byteOffset:0}),{serviceWorker:o}=t;return(s,...c)=>{const i=r();n.postMessage([i,s],...c);const l=new XMLHttpRequest;l.open("POST",o,!1),l.setRequestHeader("Content-Type","application/json"),l.send(Pe([i,e]));const{length:u,buffer:h}=new Uint8Array(De(l.responseText));return t.onsync(u?a(u,h):void 0)}})(r,(e=>(addEventListener("message",async t=>{const{data:s}=t;if(Re(s)&&s[0]===n){t.stopImmediatePropagation(),t.preventDefault();const[r,a]=s[1];postMessage([n,[r,await e.onsend(a)]])}}),e))({...t,...e})))):(e,s)=>{const{promise:n,resolve:r}=t();return new Be(e,s,r)instanceof me?n:ke.then(()=>n)};export{Fe as channel,je as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reflected",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "description": "A primitive to allow workers to call synchronously any functionality exposed on the main thread.",
5
5
  "exports": {
6
6
  ".": {
@@ -75,6 +75,7 @@
75
75
  "dependencies": {
76
76
  "@webreflection/utils": "^0.1.2",
77
77
  "next-resolver": "^0.1.6",
78
+ "reflected-ffi": "^0.7.0",
78
79
  "typescript": "^5.9.3",
79
80
  "weak-id": "^0.2.1"
80
81
  },
package/src/main/async.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import Sender from './sender.js';
2
2
  import SAB from './sab.js';
3
3
  import { bootstrap, handler, post, url } from './shared.js';
4
- import { randomUUID } from '../shared.js';
4
+ import { byteOffset, randomUUID } from '../shared.js';
5
5
 
6
6
  const CHANNEL = 'async';
7
7
 
@@ -14,7 +14,7 @@ export class Worker extends Sender {
14
14
  const handle = handler(sab, options, false);
15
15
  bc.addEventListener('message', async ({ data: [id, payload] }) => {
16
16
  await handle({ data: payload });
17
- bc.postMessage([id, i32a.slice(0, 2 + i32a[1])]);
17
+ bc.postMessage([id, new Uint8Array(sab, byteOffset, i32a[1])]);
18
18
  });
19
19
  super(...url(scriptURL, CHANNEL, options));
20
20
  super.addEventListener('message', () => resolve(this), { once: true });
package/src/main/sab.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { SharedArrayBuffer } from '@webreflection/utils/shared-array-buffer';
2
2
 
3
- import { minByteLength } from './shared.js';
3
+ import { byteOffset } from '../shared.js';
4
4
 
5
5
  export default ({
6
6
  initByteLength = 1024,
7
7
  maxByteLength = (1024 * 8)
8
8
  }) =>
9
9
  new SharedArrayBuffer(
10
- minByteLength + initByteLength,
11
- { maxByteLength: minByteLength + maxByteLength }
10
+ byteOffset + initByteLength,
11
+ { maxByteLength: byteOffset + maxByteLength }
12
12
  );
@@ -1,16 +1,17 @@
1
1
  import withResolvers from '@webreflection/utils/with-resolvers';
2
+ import { encoder } from 'reflected-ffi/encoder';
2
3
 
3
- const { notify, store } = Atomics;
4
+ import { byteOffset } from '../shared.js';
4
5
 
5
- export const minByteLength = Int32Array.BYTES_PER_ELEMENT * 2;
6
+ const { notify, store } = Atomics;
6
7
 
7
8
  export const SAB = ({
8
9
  initByteLength = 1024,
9
10
  maxByteLength = (1024 * 8)
10
11
  }) =>
11
12
  new SharedArrayBuffer(
12
- minByteLength + initByteLength,
13
- { maxByteLength: minByteLength + maxByteLength }
13
+ byteOffset + initByteLength,
14
+ { maxByteLength: byteOffset + maxByteLength }
14
15
  );
15
16
 
16
17
  /**
@@ -27,6 +28,7 @@ export const SAB = ({
27
28
  * @property {number} [initByteLength=1024] defines the initial byte length of the SharedArrayBuffer.
28
29
  * @property {number} [maxByteLength=8192] defines the maximum byte length (growth) of the SharedArrayBuffer.
29
30
  * @property {string | ServiceWorkerOptions} [serviceWorker] defines the service worker to use as fallback if SharedArrayBuffer is not supported. If not defined, the `async` fallback will be used so that no `sync` operations from the worker will be possible.
31
+ * @property {import('reflected-ffi/encoder').encoder} [encoder] defines the encoder function to use to encode the result into the SharedArrayBuffer.
30
32
  */
31
33
 
32
34
  /**
@@ -51,22 +53,25 @@ export const bootstrap = Worker => {
51
53
 
52
54
  export const handler = (sab, options, useAtomics) => {
53
55
  const i32a = new Int32Array(sab);
54
- return async ({ data }) => {
55
- const result = await options.onsync(data);
56
- const length = result.length;
57
- const requiredByteLength = minByteLength + result.buffer.byteLength;
58
- if (sab.byteLength < requiredByteLength) sab.grow(requiredByteLength);
59
- i32a.set(result, 2);
60
- if (useAtomics) {
56
+ const encode = (options.encoder ?? encoder)({ byteOffset });
57
+
58
+ const resolve = useAtomics ?
59
+ (length => {
61
60
  store(i32a, 1, length);
62
61
  store(i32a, 0, 1);
63
62
  notify(i32a, 0);
64
- }
65
- else {
63
+ }) :
64
+ (length => {
66
65
  i32a[1] = length;
67
66
  i32a[0] = 1;
68
- }
67
+ });
68
+
69
+ const process = result => {
70
+ const length = encode(result, sab);
71
+ return typeof length === 'number' ? resolve(length) : length.then(resolve);
69
72
  };
73
+
74
+ return async ({ data }) => process(await options.onsync(data));
70
75
  };
71
76
 
72
77
  const isOK = value => {
package/src/main/xhr.js CHANGED
@@ -6,7 +6,7 @@ import SAB from './sab.js';
6
6
  import Sender from './sender.js';
7
7
 
8
8
  import { handler, post, url } from './shared.js';
9
- import { randomUUID } from '../shared.js';
9
+ import { byteOffset, randomUUID } from '../shared.js';
10
10
 
11
11
  const CHANNEL = 'xhr';
12
12
 
@@ -18,8 +18,9 @@ sharedBC.addEventListener('message', async ({ data: [op, details] }) => {
18
18
  const [uid, [id, channel]] = details;
19
19
  const responses = channels.get(channel);
20
20
  if (responses) {
21
- sharedBC.postMessage(['response', [uid, await responses.get(id)]]);
21
+ const promise = responses.get(id);
22
22
  responses.delete(id);
23
+ sharedBC.postMessage(['response', [uid, await promise]]);
23
24
  }
24
25
  }
25
26
  });
@@ -76,7 +77,7 @@ class Worker extends Sender {
76
77
  const { promise, resolve } = withResolvers();
77
78
  responses.set(id, promise);
78
79
  await handle({ data: payload });
79
- resolve(i32a.slice(0, 2 + i32a[1]));
80
+ resolve(new Uint8Array(sab, byteOffset, i32a[1]));
80
81
  });
81
82
  super(...url(scriptURL, CHANNEL, options));
82
83
  super.addEventListener('message', () => resolve(this), { once: true });
@@ -15,10 +15,20 @@ bc.addEventListener('message', ({ data: [op, details] }) => {
15
15
  }
16
16
  });
17
17
 
18
+ const response = {
19
+ status: 200,
20
+ statusText: 'OK',
21
+ headers: new Headers({
22
+ 'Cache-Control': 'no-cache, must-revalidate',
23
+ 'Expires': 'Mon, 26 Jul 1997 05:00:00 GMT',
24
+ 'Content-type': 'application/json',
25
+ })
26
+ };
27
+
18
28
  const respond = async details => {
19
29
  const [uid, promise] = next();
20
30
  bc.postMessage(['request', [uid, details]]);
21
- return new Response(await promise);
31
+ return new Response(await promise, response);
22
32
  };
23
33
 
24
34
  // @ts-ignore
package/src/shared.js CHANGED
@@ -1,3 +1,5 @@
1
+ export const byteOffset = Int32Array.BYTES_PER_ELEMENT * 2;
2
+
1
3
  let hasRandomUUID = true;
2
4
  try {
3
5
  crypto.randomUUID();
@@ -1,25 +1,27 @@
1
1
  import withResolvers from '@webreflection/utils/with-resolvers';
2
+ import { decoder } from 'reflected-ffi/decoder';
2
3
  import i32 from 'weak-id/i32';
3
4
 
4
5
  import sender from './sender.js';
6
+ import { byteOffset } from '../shared.js';
5
7
 
6
8
  const { promise, resolve } = withResolvers();
7
9
 
8
10
  addEventListener(
9
11
  'message',
10
- ({ data: [sab, main, channel] }) => resolve([sab, main, channel]),
12
+ ({ data: [_, main, channel] }) => resolve([main, channel]),
11
13
  { once: true }
12
14
  );
13
15
 
14
16
  export const channel = 'async';
15
17
 
16
- const handle = (channel, i32a, options) => {
18
+ const handle = (channel, options) => {
17
19
  const bc = new BroadcastChannel(channel);
18
20
  const next = i32();
21
+ const decode = (options.decoder ?? decoder)({ byteOffset });
19
22
  const map = new Map;
20
- bc.addEventListener('message', ({ data: [id, payload] }) => {
21
- i32a.set(payload, 0);
22
- map.get(id)(options.onsync(i32a.subarray(2, 2 + i32a[1])));
23
+ bc.addEventListener('message', ({ data: [id, { length, buffer }] }) => {
24
+ map.get(id)(options.onsync(length ? decode(length, buffer) : void 0));
23
25
  map.delete(id);
24
26
  });
25
27
  return (payload, ...rest) => {
@@ -32,7 +34,7 @@ const handle = (channel, i32a, options) => {
32
34
  };
33
35
  };
34
36
 
35
- export default options => promise.then(([sab, main, channel]) => {
37
+ export default options => promise.then(([main, channel]) => {
36
38
  postMessage(1);
37
- return handle(channel, new Int32Array(sab), sender({ ...main, ...options }));
39
+ return handle(channel, sender({ ...main, ...options }));
38
40
  });
@@ -1,4 +1,7 @@
1
+ import { decoder } from 'reflected-ffi/decoder';
2
+
1
3
  import sender from './sender.js';
4
+ import { byteOffset } from '../shared.js';
2
5
 
3
6
  const { load, store, wait } = Atomics;
4
7
 
@@ -6,20 +9,26 @@ const { load, store, wait } = Atomics;
6
9
  * @typedef {Object} Options
7
10
  * @property {(payload: Int32Array) => unknown} onsync transforms the resulting `Int32Array` from *main* thread into a value usable within the worker.
8
11
  * @property {(payload: unknown) => unknown |Promise<unknown>} onsend invoked to define what to return to the *main* thread when it calls `worker.send(payload)`.
12
+ * @property {import('reflected-ffi/decoder').decoder} [decoder] defines the decoder function to use to decode the result from the SharedArrayBuffer.
9
13
  */
10
14
 
11
15
  /**
12
16
  * @param {MessageChannel | BroadcastChannel} channel
13
17
  * @param {Int32Array} i32a
14
- * @param {Options} options
18
+ * @param {Options} options
15
19
  * @returns {(payload: unknown, ...rest: unknown[]) => unknown}
16
20
  */
17
- const handle = (channel, i32a, options) => (payload, ...rest) => {
18
- // @ts-ignore
19
- channel.postMessage(payload, ...rest);
20
- wait(i32a, 0, 0);
21
- store(i32a, 0, 0);
22
- return options.onsync(i32a.subarray(2, 2 + load(i32a, 1)));
21
+ const handle = (channel, i32a, options) => {
22
+ const decode = (options.decoder ?? decoder)({ byteOffset });
23
+ const { buffer } = i32a;
24
+ return (payload, ...rest) => {
25
+ // @ts-ignore
26
+ channel.postMessage(payload, ...rest);
27
+ wait(i32a, 0, 0);
28
+ store(i32a, 0, 0);
29
+ const length = load(i32a, 1);
30
+ return options.onsync(length ? decode(length, buffer) : void 0);
31
+ };
23
32
  };
24
33
 
25
34
  /**
package/src/worker/xhr.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import withResolvers from '@webreflection/utils/with-resolvers';
2
+ import { decoder } from 'reflected-ffi/decoder';
2
3
  import i32 from 'weak-id/i32';
3
4
 
4
5
  import sender from './sender.js';
@@ -9,15 +10,16 @@ const { promise, resolve } = withResolvers();
9
10
 
10
11
  addEventListener(
11
12
  'message',
12
- ({ data: [sab, main, channel] }) => resolve([sab, main, channel]),
13
+ ({ data: [_, main, channel] }) => resolve([main, channel]),
13
14
  { once: true }
14
15
  );
15
16
 
16
17
  export const channel = 'xhr';
17
18
 
18
- const handle = (channel, i32a, options) => {
19
+ const handle = (channel, options) => {
19
20
  const bc = new BroadcastChannel(channel);
20
21
  const next = i32();
22
+ const decode = (options.decoder ?? decoder)({ byteOffset: 0 });
21
23
  const { serviceWorker } = options;
22
24
  return (payload, ...rest) => {
23
25
  const id = next();
@@ -27,12 +29,12 @@ const handle = (channel, i32a, options) => {
27
29
  xhr.open('POST', serviceWorker, false);
28
30
  xhr.setRequestHeader('Content-Type', 'application/json');
29
31
  xhr.send(stringify([id, channel]));
30
- i32a.set(parse(xhr.responseText), 0);
31
- return options.onsync(i32a.subarray(2, 2 + i32a[1]));
32
+ const { length, buffer } = new Uint8Array(parse(xhr.responseText));
33
+ return options.onsync(length ? decode(length, buffer) : void 0);
32
34
  };
33
35
  };
34
36
 
35
- export default options => promise.then(([sab, main, channel]) => {
37
+ export default options => promise.then(([main, channel]) => {
36
38
  postMessage(1);
37
- return handle(channel, new Int32Array(sab), sender({ ...main, ...options }));
39
+ return handle(channel, sender({ ...main, ...options }));
38
40
  });
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <style>body{font-family:sans-serif}</style>
7
7
  <title>reflected README</title>
8
- <script src="./mini-coi.js"></script>
8
+ <script src="../mini-coi.js"></script>
9
9
  <script type="module" src="./index.js"></script>
10
10
  </head>
11
11
  </html>
@@ -15,8 +15,6 @@ const worker = await reflect(
15
15
  // ℹ️ type is enforced to be 'module' due top-level await
16
16
  {
17
17
  // invoked when the worker asks to synchronize a call
18
- // and it mmust return an Int32Array reference to populate
19
- // the SharedArrayBuffer and notify/unlock the worker
20
18
  // ℹ️ works even if synchronous but it's resolved asynchronously
21
19
  // ⚠️ the worker is not responsive until this returns so
22
20
  // be sure you handle errors gracefully to still provide
@@ -26,13 +24,11 @@ const worker = await reflect(
26
24
 
27
25
  if (invoke === 'test_sum') {
28
26
  // just demoing this can be async too
29
- const value = await test_sum(...args);
30
- return new Int32Array([value]);
27
+ return await test_sum(...args);
31
28
  }
32
29
 
33
- // errors should still be Int32Array but
34
- // it is trivial to return no result
35
- return new Int32Array(0);
30
+ // it is trivial to return no result or even errors
31
+ return new Error('unknown ' + invoke);
36
32
  },
37
33
 
38
34
  // optional: the initial SharedArrayBuffer length
@@ -7,7 +7,7 @@ const reflected = await reflect({
7
7
  // that the worker can use/understand after invoke
8
8
  // ℹ️ must be synchronous and it's invoked synchronously
9
9
  onsync(response) {
10
- return response.length ? response[0] : undefined;
10
+ return response;
11
11
  },
12
12
 
13
13
  async onsend(payload) {
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <style>body{font-family:sans-serif}</style>
7
+ <title>reflected README</title>
8
+ <script src="../mini-coi.js"></script>
9
+ <script type="module" src="./index.js"></script>
10
+ </head>
11
+ </html>
@@ -0,0 +1,6 @@
1
+ import reflect, { channel } from '../../dist/index.js';
2
+
3
+ import local from 'https://esm.run/reflected-ffi/local';
4
+ import { encoder } from 'https://esm.run/reflected-ffi/encoder';
5
+
6
+
package/test/index.js CHANGED
@@ -11,7 +11,7 @@ try {
11
11
  onsync: async (data, ...rest) => {
12
12
  // console.log('main', data, rest);
13
13
  // await new Promise(resolve => setTimeout(resolve, 1000));
14
- return new Int32Array([6, 7, 8, 9, 10]);
14
+ return [6, 7, 8, 9, 10];
15
15
  },
16
16
  onerror: console.error,
17
17
  });
@@ -26,7 +26,7 @@ try {
26
26
  { once: true }
27
27
  );
28
28
 
29
- worker.send(new Int32Array([1, 2, 3, 4, 5])).then(data => {
29
+ worker.send([1, 2, 3, 4, 5]).then(data => {
30
30
  log.append(`send: [${data}]\n`);
31
31
  });
32
32
  } catch (error) {
package/test/sw.js CHANGED
@@ -1 +1 @@
1
- const e=Promise.withResolvers||function(){var e,t,n=new this((n,s)=>{e=n,t=s});return{resolve:e,reject:t,promise:n}};var t=e.bind(Promise);const[n,s]=((e=e=>e)=>{const n=new Map,s=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let a;do{a=e(s())}while(n.has(a));const r=t();return n.set(a,r),[a,r.promise]},(e,t,s)=>{const a=n.get(e);n.delete(e),s?a?.reject(s):a?.resolve(t)}]})(),{protocol:a,host:r,pathname:o}=location,i=`${a}//${r}${o}`,c=new BroadcastChannel("fc260aad-4404-43b8-ae9d-2c06554bb294");c.addEventListener("message",({data:[e,t]})=>{if("response"===e){const[e,n]=t;s(e,`[${n.join(",")}]`)}});const d=async e=>{const[t,s]=n();return c.postMessage(["request",[t,e]]),new Response(await s)};addEventListener("activate",e=>e.waitUntil(clients.claim())),addEventListener("fetch",async e=>{const{request:t}=e;"POST"===t.method&&t.url.startsWith(i)&&(e.stopImmediatePropagation(),e.respondWith(t.json().then(d)),e.preventDefault())}),addEventListener("install",()=>skipWaiting());
1
+ const e=Promise.withResolvers||function(){var e,t,n=new this((n,s)=>{e=n,t=s});return{resolve:e,reject:t,promise:n}};var t=e.bind(Promise);const[n,s]=((e=e=>e)=>{const n=new Map,s=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let a;do{a=e(s())}while(n.has(a));const o=t();return n.set(a,o),[a,o.promise]},(e,t,s)=>{const a=n.get(e);n.delete(e),s?a?.reject(s):a?.resolve(t)}]})(),{protocol:a,host:o,pathname:r}=location,i=`${a}//${o}${r}`,c=new BroadcastChannel("fc260aad-4404-43b8-ae9d-2c06554bb294");c.addEventListener("message",({data:[e,t]})=>{if("response"===e){const[e,n]=t;s(e,`[${n.join(",")}]`)}});const d={status:200,statusText:"OK",headers:new Headers({"Cache-Control":"no-cache, must-revalidate",Expires:"Mon, 26 Jul 1997 05:00:00 GMT","Content-type":"application/json"})},l=async e=>{const[t,s]=n();return c.postMessage(["request",[t,e]]),new Response(await s,d)};addEventListener("activate",e=>e.waitUntil(clients.claim())),addEventListener("fetch",async e=>{const{request:t}=e;"POST"===t.method&&t.url.startsWith(i)&&(e.stopImmediatePropagation(),e.respondWith(t.json().then(l)),e.preventDefault())}),addEventListener("install",()=>skipWaiting());
@@ -1,4 +1,3 @@
1
- export const minByteLength: number;
2
1
  export function SAB({ initByteLength, maxByteLength }: {
3
2
  initByteLength?: number;
4
3
  maxByteLength?: number;
@@ -6,7 +5,7 @@ export function SAB({ initByteLength, maxByteLength }: {
6
5
  export function bootstrap<T>(Worker: T): (scriptURL: string, options: Options) => Promise<T>;
7
6
  export function handler(sab: any, options: any, useAtomics: any): ({ data }: {
8
7
  data: any;
9
- }) => Promise<void>;
8
+ }) => Promise<any>;
10
9
  export function post(sab: any, options: any): any[];
11
10
  export function url(scriptURL: any, reflected: any, options: any): any[];
12
11
  /**
@@ -41,4 +40,9 @@ export type Options = {
41
40
  * defines the service worker to use as fallback if SharedArrayBuffer is not supported. If not defined, the `async` fallback will be used so that no `sync` operations from the worker will be possible.
42
41
  */
43
42
  serviceWorker?: string | ServiceWorkerOptions;
43
+ /**
44
+ * defines the encoder function to use to encode the result into the SharedArrayBuffer.
45
+ */
46
+ encoder?: typeof encoder;
44
47
  };
48
+ import { encoder } from 'reflected-ffi/encoder';
package/types/shared.d.ts CHANGED
@@ -1 +1,2 @@
1
+ export const byteOffset: number;
1
2
  export function randomUUID(): string;
@@ -8,4 +8,9 @@ export type Options = {
8
8
  * invoked to define what to return to the *main* thread when it calls `worker.send(payload)`.
9
9
  */
10
10
  onsend: (payload: unknown) => unknown | Promise<unknown>;
11
+ /**
12
+ * defines the decoder function to use to decode the result from the SharedArrayBuffer.
13
+ */
14
+ decoder?: typeof decoder;
11
15
  };
16
+ import { decoder } from 'reflected-ffi/decoder';
@@ -1 +0,0 @@
1
- import{m as e,b as a,S as s,u as t,p as r,h as n}from"./shared-MkVjuKUg.js";import{S as o}from"./shared-array-buffer-cwdMr2mc.js";import{r as c}from"./shared-RFmxa5x4.js";var d=({initByteLength:a=1024,maxByteLength:s=8192})=>new o(e+a,{maxByteLength:e+s});const m="async";let p=class extends s{constructor(e,a,s){const o=c(),p=new BroadcastChannel(o),h=d(a),i=new Int32Array(h),g=n(h,a,!1);p.addEventListener("message",async({data:[e,a]})=>{await g({data:a}),p.postMessage([e,i.slice(0,2+i[1])])}),super(...t(e,m,a)),super.addEventListener("message",()=>s(this),{once:!0}),super.postMessage(r(h,a).concat(o))}get channel(){return m}};var h=a(p),i=Object.freeze({__proto__:null,Worker:p,default:h});export{d as S,p as W,i as a};
@@ -1 +0,0 @@
1
- import{w as e}from"./with-resolvers-CHEvl4oe.js";import{i as s}from"./i32-C78nBJH2.js";import{s as t}from"./sender-BMLGKAss.js";import"./channel-CdS9bLt4.js";const{promise:r,resolve:a}=e();addEventListener("message",({data:[e,s,t]})=>a([e,s,t]),{once:!0});const n="async";var o=a=>r.then(([r,n,o])=>(postMessage(1),((t,r,a)=>{const n=new BroadcastChannel(t),o=s(),d=new Map;return n.addEventListener("message",({data:[e,s]})=>{r.set(s,0),d.get(e)(a.onsync(r.subarray(2,2+r[1]))),d.delete(e)}),(s,...t)=>{const{promise:r,resolve:a}=e(),i=o();return d.set(i,a),n.postMessage([i,s],...t),r}})(o,new Int32Array(r),t({...n,...a}))));export{n as channel,o as default};
@@ -1 +0,0 @@
1
- import{w as r}from"./with-resolvers-CHEvl4oe.js";import{h as s}from"./shared-C_kd5Il-.js";import"./sender-BMLGKAss.js";import"./channel-CdS9bLt4.js";const{promise:a,resolve:e}=r(),o="broadcast";var t=s(a,({data:[r,s,a]})=>e([r,s,new BroadcastChannel(a)]));export{o as channel,t as default};
@@ -1 +0,0 @@
1
- var a="fc260aad-4404-43b8-ae9d-2c06554bb294";export{a as S};
@@ -1 +0,0 @@
1
- import{w as s}from"./with-resolvers-CHEvl4oe.js";import{h as r}from"./shared-C_kd5Il-.js";import"./sender-BMLGKAss.js";import"./channel-CdS9bLt4.js";const{promise:e,resolve:o}=s(),a="message";var t=r(e,({data:[s,r],ports:[e]})=>o([s,r,e]));export{a as channel,t as default};
@@ -1 +0,0 @@
1
- import{b as s,S as e,a as t,h as r,u as a,p as n}from"./shared-MkVjuKUg.js";import"./with-resolvers-CHEvl4oe.js";import"./i32-C78nBJH2.js";import"./channel-CdS9bLt4.js";const o="message";var p=s(class extends e{constructor(s,e,p){const{port1:i,port2:c}=new MessageChannel,d=t(e);i.addEventListener(o,r(d,e,!0)),i.start(),super(...a(s,o,e)),super.addEventListener(o,()=>p(this),{once:!0}),super.postMessage(n(d,e),[c])}get channel(){return o}});export{p as default};
@@ -1 +0,0 @@
1
- import{S as a}from"./channel-CdS9bLt4.js";const{isArray:s}=Array;var e=e=>(addEventListener("message",async t=>{const{data:n}=t;if(s(n)&&n[0]===a){t.stopImmediatePropagation(),t.preventDefault();const[s,o]=n[1];postMessage([a,[s,await e.onsend(o)]])}}),e);export{e as s};
@@ -1 +0,0 @@
1
- import{s}from"./sender-BMLGKAss.js";const{load:e,store:t,wait:a}=Atomics,o=(o,n)=>(addEventListener("message",n,{once:!0}),n=>o.then(([o,r,c])=>(postMessage(1),((s,o,n)=>(r,...c)=>(s.postMessage(r,...c),a(o,0,0),t(o,0,0),n.onsync(o.subarray(2,2+e(o,1)))))(c,new Int32Array(o),s({...r,...n})))));export{o as h};
@@ -1 +0,0 @@
1
- import{w as e}from"./with-resolvers-CHEvl4oe.js";import{i as t}from"./i32-C78nBJH2.js";import{S as s}from"./channel-CdS9bLt4.js";const{isArray:r}=Array,n=e=>e;class o extends Worker{#e;#t;constructor(e,o){super(e,o),this.#e=t(),this.#t=new Map,o.onsend||(o.onsend=n),super.addEventListener("message",async e=>{const{data:t}=e;if(r(t)&&t[0]===s){e.stopImmediatePropagation(),e.preventDefault();const[s,r]=t[1],n=this.#t.get(s);this.#t.delete(s),n(await o.onsend(r))}})}send(t,...r){const n=this.#e(),{promise:o,resolve:a}=e();return this.#t.set(n,a),super.postMessage([s,[n,t]],...r),o}}const{notify:a,store:i}=Atomics,c=2*Int32Array.BYTES_PER_ELEMENT,u=({initByteLength:e=1024,maxByteLength:t=8192})=>new SharedArrayBuffer(c+e,{maxByteLength:c+t}),h=t=>(s,r)=>{const{promise:n,resolve:o}=e();return new t(s,r,o),n},m=(e,t,s)=>{const r=new Int32Array(e);return async({data:n})=>{const o=await t.onsync(n),u=o.length,h=c+o.buffer.byteLength;e.byteLength<h&&e.grow(h),r.set(o,2),s?(i(r,1,u),i(r,0,1),a(r,0)):(r[1]=u,r[0]=1)}},p=e=>{switch(typeof e){case"symbol":case"function":return!1}return!0},y=(e,t)=>{const s={};for(const e in t){const r=t[e];p(e)&&p(r)&&(s[e]=r)}return[e,s]},d=(e,t,s)=>{const r=new URL(e,location.href);return r.searchParams.set("reflected",t),[r,{...s,type:"module"}]};export{o as S,u as a,h as b,m as h,c as m,y as p,d as u};
@@ -1 +0,0 @@
1
- let t=!0;try{crypto.randomUUID()}catch(o){t=!1}const o=t?()=>crypto.randomUUID():()=>(Date.now()+Math.random()).toString(36);export{o as r};
@@ -1 +0,0 @@
1
- import{w as e}from"./with-resolvers-CHEvl4oe.js";import{W as t,S as s}from"./async-CKeQT1Lz.js";import{S as r}from"./channel-CdS9bLt4.js";import{S as a,u as n,p as o,h as i}from"./shared-MkVjuKUg.js";import{r as c}from"./shared-RFmxa5x4.js";import"./shared-array-buffer-cwdMr2mc.js";import"./i32-C78nBJH2.js";const l=new Map,d=new BroadcastChannel(r);d.addEventListener("message",async({data:[e,t]})=>{if("request"===e){const[e,[s,r]]=t,a=l.get(r);a&&(d.postMessage(["response",[e,await a.get(s)]]),a.delete(s))}});const{promise:h,resolve:p}=e();let f=!0;const m=(e,t)=>{let s,r=!0,{url:a}=t;e.getRegistration(a).then(s=>s??e.register(a,t)).then(function n(o){const{controller:i}=e;if(r=r&&!!i,s=o.installing||o.waiting||o.active,!s)return m(e,t);if("activated"===s.state){if(r){if(i.scriptURL===a)return p();o.unregister()}location.reload()}else s.addEventListener("statechange",()=>n(o),{once:!0})})};class u extends a{#e;constructor(r,a,d){if(f){f=!1;let{serviceWorker:e}=a;if(!e)return new t(r,a,d);"string"==typeof e&&(e={url:e}),e.url=new URL(e.url,location.href).href,m(navigator.serviceWorker,e)}const h=c(),p=new BroadcastChannel(h),u=s(a),g=new Map,v=new Int32Array(u),w=i(u,a,!1);l.set(h,g),p.addEventListener("message",async({data:[t,s]})=>{const{promise:r,resolve:a}=e();g.set(t,r),await w({data:s}),a(v.slice(0,2+v[1]))}),super(...n(r,"xhr",a)),super.addEventListener("message",()=>d(this),{once:!0}),super.postMessage(o(u,a).concat(h)),this.#e=h}terminate(){l.delete(this.#e),super.terminate()}get channel(){return"xhr"}}var g=(s,r)=>{const{promise:a,resolve:n}=e();return new u(s,r,n)instanceof t?a:h.then(()=>a)};export{g as default};
@@ -1 +0,0 @@
1
- import{w as e}from"./with-resolvers-CHEvl4oe.js";import{i as s}from"./i32-C78nBJH2.js";import{s as t}from"./sender-BMLGKAss.js";import"./channel-CdS9bLt4.js";const{parse:r,stringify:n}=JSON,{promise:o,resolve:a}=e();addEventListener("message",({data:[e,s,t]})=>a([e,s,t]),{once:!0});const p="xhr";var i=e=>o.then(([o,a,p])=>(postMessage(1),((e,t,o)=>{const a=new BroadcastChannel(e),p=s(),{serviceWorker:i}=o;return(s,...c)=>{const d=p();a.postMessage([d,s],...c);const m=new XMLHttpRequest;return m.open("POST",i,!1),m.setRequestHeader("Content-Type","application/json"),m.send(n([d,e])),t.set(r(m.responseText),0),o.onsync(t.subarray(2,2+t[1]))}})(p,new Int32Array(o),t({...a,...e}))));export{p as channel,i as default};
@@ -1,28 +0,0 @@
1
- /*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */
2
- /*! mini-coi - Andrea Giammarchi and contributors, licensed under MIT */
3
- (({ document: d, navigator: { serviceWorker: s } }) => {
4
- if (d) {
5
- const { currentScript: c } = d;
6
- s.register(c.src, { scope: c.getAttribute('scope') || '.' }).then(r => {
7
- r.addEventListener('updatefound', () => location.reload());
8
- if (r.active && !s.controller) location.reload();
9
- });
10
- }
11
- else {
12
- addEventListener('install', () => skipWaiting());
13
- addEventListener('activate', e => e.waitUntil(clients.claim()));
14
- addEventListener('fetch', e => {
15
- const { request: r } = e;
16
- if (r.cache === 'only-if-cached' && r.mode !== 'same-origin') return;
17
- e.respondWith(fetch(r).then(r => {
18
- const { body, status, statusText } = r;
19
- if (!status || status > 399) return r;
20
- const h = new Headers(r.headers);
21
- h.set('Cross-Origin-Opener-Policy', 'same-origin');
22
- h.set('Cross-Origin-Embedder-Policy', 'require-corp');
23
- h.set('Cross-Origin-Resource-Policy', 'cross-origin');
24
- return new Response(status == 204 ? null : body, { status, statusText, headers: h });
25
- }));
26
- });
27
- }
28
- })(self);