svelte-asyncable
Version:
Super tiny, declarative, optimistic, async store for SvelteJS.
3 lines (2 loc) • 843 B
JavaScript
import{derived as e,writable as r,get as t}from"svelte/store";function a(a,i=(()=>{}),s=[]){let o;const l=new Promise((e=>o=e)),n=e(s,(e=>e)),c=r(l,(e=>n.subscribe((async(r=[])=>{let t=a(...r);void 0!==t&&(t=Promise.resolve(t),e(t),o(t))}))));async function y(e,r){if(e!==r){c.set(Promise.resolve(e));try{await i(e,r)}catch(e){throw c.set(Promise.resolve(r)),e}}}return{subscribe:c.subscribe,async update(e){if(!i)return;let r,a;try{r=await t(c),a=await e((s=r,"object"!=typeof s||null===s?s:Array.isArray(s)?[...s]:{...s}))}finally{await y(a,r)}var s},async set(e){if(!i)return;let r;try{r=await t(c),e=await e}finally{await y(e,r)}},get:()=>t(c)}}function i(r,t){return e(r,((e,t)=>(Array.isArray(r)?Promise.allSettled:Promise.resolve).call(Promise,e).then(t)),t)}export{a as asyncable,i as syncable};
//# sourceMappingURL=index.min.mjs.map