UNPKG

@vegajs/vortex

Version:

🌀 A next-gen, lightweight state management library for JavaScript and TypeScript.

1 lines • 1.38 kB
import*as e from"../../constants.mjs";import*as t from"../../utils/index.mjs";import*as r from"./adapters/index.mjs";let a={isReady:!1,globalStorage:null},s=({globalStorage:e=new r.MemoryStorage})=>{if(a.isReady)throw Error("Persist plugin is already configured");a.globalStorage=e,a.isReady=!0},o=s=>{let{key:o,properties:i,onBeforeHydration:l,onHydrated:n,onHydrationError:m,migrations:u,version:d=0,storage:g=new r.StorageAdapter(a.globalStorage)}=s,c=e=>{let r=e.getSnapshot(),a=i?Array.from(new Set(i)):(0,t.toObjectKeys)(r).filter(e=>!["function","undefined"].includes(typeof r[e])),s=r=>a.reduce((a,s)=>{let o=r[s];return void 0!==o&&(a[s]=(0,t.isQuery)(e.state[s])?e.state[s].value.data:o),a},{});(async()=>{try{let a;l?.();let i=await g.getItem(o);if(i){let r=i.version;if(a=i.data,u&&r<d){for(let e=r;e<d;e++){let t=u[e];t&&(a=t(a))}g.setItem(o,{version:d,data:a})}e.action(e=>{(0,t.toObjectKeys)(a).forEach(r=>{let s=a[r];(0,t.isReactive)(e[r])&&(e[r].value=s),console.log((0,t.isQuery)(e[r]));let o=e[r];(0,t.isQuery)(o)&&o.update(s)})}),n?.(a)}else g.setItem(o,{version:d,data:s(r)})}catch(e){m?.(e),g.removeItem(o)}})();let c=!1;return e.subscribe(e=>{c||(c=!0,Promise.resolve().then(()=>{g.setItem(o,{version:d,data:s(e)}),c=!1}))})};return c.pluginName=e.PERSIST_NAME,{remove:()=>g.removeItem(o),apply:c}};export{s as configurePersistPlugin,o as persistPlugin};