svelte-streamable
Version:
Super tiny, simple to use SvelteJS store for real-time updates from server via SSE.
3 lines (2 loc) • 922 B
JavaScript
import{readable as e}from"svelte/store";const t={};function r({url:r,event:s="message",format:o="json",...i},c,a){const u=!c||c.length<2,d=a?Promise.resolve(a):new Promise(n);return e(d,(e=>{let a=n;function m(t){e(void 0!==t?Promise.resolve(t):d)}function v(e){let t;a(!1),e&&e.data&&(t="json"===o?JSON.parse(e.data):"base64"===o?atob(e.data):"urlencoded"===o?Object.fromEntries(new URLSearchParams(e.data)):e.data);const r=c?c(t,m):t;u?m(r):a="function"==typeof r?r:n}function l(t){e(Promise.reject(t))}const b=Object.entries(i).sort().reduce(((e,[,t])=>`${e}/${t}`),r);let f=t[b];return f||(f=new EventSource(r,i),f.subscribers=0,t[b]=f),f.addEventListener("error",l),f.addEventListener(s,v),c&&setTimeout(v),f.subscribers++,()=>{f.removeEventListener("error",l),f.removeEventListener(s,v),--f.subscribers||(f.close(),delete t[b]),a(!0)}}))}function n(){}export{r as streamable};
//# sourceMappingURL=index.min.mjs.map