UNPKG

svelte-streamable

Version:

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

3 lines (2 loc) 1.22 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("svelte/store")):"function"==typeof define&&define.amd?define(["exports","svelte/store"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).streamable={},e.store)}(this,(function(e,t){"use strict";const r={};function s(){}e.streamable=function({url:e,event:n="message",format:o="json",...i},a,c){const d=!a||a.length<2,u=c?Promise.resolve(c):new Promise(s);return t.readable(u,(t=>{let c=s;function f(e){t(void 0!==e?Promise.resolve(e):u)}function l(e){let t;c(!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=a?a(t,f):t;d?f(r):c="function"==typeof r?r:s}function b(e){t(Promise.reject(e))}const m=Object.entries(i).sort().reduce(((e,[,t])=>`${e}/${t}`),e);let v=r[m];return v||(v=new EventSource(e,i),v.subscribers=0,r[m]=v),v.addEventListener("error",b),v.addEventListener(n,l),a&&setTimeout(l),v.subscribers++,()=>{v.removeEventListener("error",b),v.removeEventListener(n,l),--v.subscribers||(v.close(),delete r[m]),c(!0)}}))},Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=index.min.js.map