itty-sockets
Version:
WebSockets : simplified and minified.
2 lines (1 loc) • 725 B
JavaScript
;exports.connect=(e,s={})=>{let t,n,a=[],o={},p=()=>(t||(t=new WebSocket((/^wss?:/.test(e)?e:"wss://itty.ws/c/"+e)+"?"+new URLSearchParams(s)),t.onmessage=(e,s=JSON.parse(e.data),t=s?.message,n={...null==t?.[0]&&t,...s})=>[n.type,s.type?0:"message","*"].map(e=>o[e]?.map(e=>e(n))),t.onopen=()=>(a.splice(0).map(e=>t.send(e)),o.open?.map(e=>e(n)),n&&t?.close()),t.onclose=()=>(n=t=null,o.close?.map(e=>e(n)))),c),c={open:p,send:(e,s)=>(e=(s?`${s}`:"")+JSON.stringify(e),1&t?.readyState?t.send(e):a.push(e),p()),on:(e,s)=>((o[e?.[0]?e:"*"]??=[]).push(e?.[0]?s:t=>e?.(t)&&s(t)),p()),remove:(e,s)=>(o[e]=o[e]?.filter(e=>e!=s),c),close:()=>(1&t?.readyState?t.close():n=1,c),push:(e,s)=>(n=1,c.send(e,s))};return c};