UNPKG

svelte-streamable

Version:

Super tiny, simple to use SvelteJS store for real-time updates from server via SSE.

3 lines (2 loc) 1.38 kB
function e(){}Promise.resolve();const t=[];function n(n,r=e){let o;const s=new Set;function c(e){if(c=e,((r=n)!=r?c==c:r!==c||r&&"object"==typeof r||"function"==typeof r)&&(n=e,o)){const e=!t.length;for(const e of s)e[1](),t.push(e,n);if(e){for(let e=0;e<t.length;e+=2)t[e][0](t[e+1]);t.length=0}}var r,c}return{set:c,update:function(e){c(e(n))},subscribe:function(t,i=e){const u=[t,i];return s.add(u),1===s.size&&(o=r(c)||e),t(n),()=>{s.delete(u),0===s.size&&(o(),o=null)}}}}const r={};function o({url:e,event:t="message",format:o="json",...c},i,u){const a=!i||i.length<2,f=u?Promise.resolve(u):new Promise(s);return{subscribe:n(f,(n=>{let u=s;function l(e){n(void 0!==e?Promise.resolve(e):f)}function d(e){let t;u(!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 n=i?i(t,l):t;a?l(n):u="function"==typeof n?n:s}function b(e){n(Promise.reject(e))}const v=Object.entries(c).sort().reduce(((e,[,t])=>`${e}/${t}`),e);let m=r[v];return m||(m=new EventSource(e,c),m.subscribers=0,r[v]=m),m.addEventListener("error",b),m.addEventListener(t,d),i&&setTimeout(d),m.subscribers++,()=>{m.removeEventListener("error",b),m.removeEventListener(t,d),--m.subscribers||(m.close(),delete r[v]),u(!0)}})).subscribe}}function s(){}export{o as streamable}; //# sourceMappingURL=streamable.min.mjs.map