UNPKG

svelte-asyncable

Version:

Super tiny, declarative, optimistic, async store for SvelteJS.

3 lines (2 loc) 1.77 kB
function t(){}function e(t){return t()}function n(e,...n){if(null==e)return t;const r=e.subscribe(...n);return r.unsubscribe?()=>r.unsubscribe():r}function r(t){let e;return n(t,(t=>e=t))(),e}const s=[];function i(e,n=t){let r;const i=new Set;function o(t){if(o=t,((n=e)!=n?o==o:n!==o||n&&"object"==typeof n||"function"==typeof n)&&(e=t,r)){const t=!s.length;for(const t of i)t[1](),s.push(t,e);if(t){for(let t=0;t<s.length;t+=2)s[t][0](s[t+1]);s.length=0}}var n,o}return{set:o,update:function(t){o(t(e))},subscribe:function(s,c=t){const u=[s,c];return i.add(u),1===i.size&&(r=n(o)||t),s(e),()=>{i.delete(u),0===i.size&&(r(),r=null)}}}}function o(r,s,o){const c=!Array.isArray(r),u=c?[r]:r,a=s.length<2;return l=r=>{let i=!1;const o=[];let l=0,f=t;const b=()=>{if(l)return;f();const e=s(c?o[0]:o,r);a?r(e):f="function"==typeof e?e:t},y=u.map(((t,e)=>n(t,(t=>{o[e]=t,l&=~(1<<e),i&&b()}),(()=>{l|=1<<e}))));return i=!0,b(),function(){y.forEach(e),f()}},{subscribe:i(o,l).subscribe};var l}function c(t,e=(()=>{}),n=[]){let s;const c=new Promise((t=>s=t)),u=o(n,(t=>t)),a=i(c,(e=>u.subscribe((async(n=[])=>{let r=t(...n);void 0!==r&&(r=Promise.resolve(r),e(r),s(r))}))));async function l(t,n){if(t!==n){a.set(Promise.resolve(t));try{await e(t,n)}catch(t){throw a.set(Promise.resolve(n)),t}}}return{subscribe:a.subscribe,async update(t){if(!e)return;let n,s;try{n=await r(a),s=await t((i=n,"object"!=typeof i||null===i?i:Array.isArray(i)?[...i]:{...i}))}finally{await l(s,n)}var i},async set(t){if(!e)return;let n;try{n=await r(a),t=await t}finally{await l(t,n)}},get:()=>r(a)}}function u(t,e){return o(t,((e,n)=>(Array.isArray(t)?Promise.allSettled:Promise.resolve).call(Promise,e).then(n)),e)}export{c as asyncable,u as syncable}; //# sourceMappingURL=asyncable.min.mjs.map