UNPKG

accordant

Version:
2 lines (1 loc) 1.29 kB
const{isArray:t}=Array;class s extends Event{#t;#s;constructor(t,s,e){super(t),this.#t=s,this.#s=e}get data(){return this.#t}get ports(){return[this.#s]}}const e=t=>t.stopImmediatePropagation();(a=>{let n=!0,r="";a.addEventListener("message",o=>{const{data:i}=o;if(n)e(o),n=!1,r=i;else if(t(i)&&2===i.length&&r===i[0]){e(o);const{ports:[t]}=o;t.start(),a.dispatchEvent(new s("channel",i[1],t))}})})(self);const{isArray:a}=Array,{assign:n}=Object,r={},o=t=>n(r,t);class i{constructor(t,s){this.data=t,this.options=s}}const c=new Set,p=(t,s,e,...a)=>t.postMessage([s,e],...a);class d{#e;constructor(t){this.#e=t}async handleEvent({currentTarget:t,data:[s,e,a]}){if("number"==typeof s)try{const n=await this.#e[e](...a);n instanceof i?p(t,s,n.data,n.options):p(t,s,n)}catch(e){p(t,s,e)}else((t,s)=>{for(const e of c)e.deref()?.postMessage([!0,t,s])})(e,a)}}const{promise:f,resolve:h}=Promise.withResolvers();addEventListener("channel",function t(s){if(((t,s)=>{const{data:e,ports:n}=t;return!!("accordant"===e&&a(n)&&n.at(0)instanceof MessagePort)&&(t.stopImmediatePropagation(),t.currentTarget.removeEventListener(t.type,s),!0)})(s,t)){const[t]=s.ports;t.addEventListener("message",new d(r)),h(t)}});const g=(...t)=>{f.then(s=>s.postMessage([!0,"",t]))};export{g as broadcast,o as exports};