@dojoengine/sdk
Version:
Dojo SDK: Build onchain and provable apps faster
2 lines • 2.73 kB
JavaScript
import{immer as w}from"zustand/middleware/immer";import{applyPatches as b,produceWithPatches as P,enablePatches as k}from"immer";import{subscribeWithSelector as C}from"zustand/middleware";import{CairoCustomEnum as T,CairoOption as l,CairoOptionVariant as u}from"starknet";function g(n){return n instanceof l}function S(n,r){return r instanceof l&&r.isSome()?new l(u.Some,r.unwrap()):n instanceof l?n.isSome()?new l(u.Some,n.unwrap()):new l(u.None):n}function p(n){return n instanceof T}function E(n,r){if(!p(n)||!p(r))return n;let a=r.activeVariant(),s=r.unwrap();if(a&&s!==void 0){let t={};for(let o in n.variant)t[o]=void 0;return t[a]=s,new T(t)}let e=n.activeVariant(),i=n.unwrap();if(e&&i!==void 0){let t={};for(let o in n.variant)t[o]=void 0;return t[e]=i,new T(t)}return n}function y(n,r){if(g(n)&&g(r))return S(n,r);if(p(n)&&p(r))return E(n,r);let a={...n};for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(r[s]!==null&&typeof r[s]=="object"&&!Array.isArray(r[s])&&s in n&&typeof n[s]=="object"&&!Array.isArray(n[s])?a[s]=y(n[s],r[s]):a[s]=r[s]);return a}k();function I(n){let r=n(C(w((a,s)=>({entities:{},pendingTransactions:{},setEntities:e=>{a(i=>{for(let t of e)i.entities[t.entityId]=t})},mergeEntities:e=>{a(i=>{for(let t of e)if(t.entityId&&t.models){let o=i.entities[t.entityId];if(!o){i.entities[t.entityId]=t;continue}let m=Object.assign({},o.models);for(let[c,d]of Object.entries(t.models)){let f=c;f in m||(m[f]={}),m[f]=y(m[f],d)}i.entities[t.entityId]={...o,...t,models:m}}})},updateEntity:e=>{a(i=>{if(e.entityId&&e.models){let t=i.entities[e.entityId];if(!t){i.entities[e.entityId]=e;return}let o=Object.assign({},t.models);for(let[m,c]of Object.entries(e.models)){let d=m;d in o||(o[d]={}),o[d]=y(o[d],c)}i.entities[e.entityId]={...t,...e,models:o}}})},applyOptimisticUpdate:(e,i)=>{let t=s(),[o,m,c]=P(t,d=>{i(d)});a(()=>o),a(d=>{d.pendingTransactions[e]={transactionId:e,patches:m,inversePatches:c}})},revertOptimisticUpdate:e=>{let i=s().pendingTransactions[e];i&&(a(t=>b(t,i.inversePatches)),a(t=>{delete t.pendingTransactions[e]}))},confirmTransaction:e=>{a(i=>{delete i.pendingTransactions[e]})},subscribeToEntity:(e,i)=>r.subscribe(t=>{let o=t.entities[e];i(o)}),waitForEntityChange:(e,i,t=6e3)=>new Promise((o,m)=>{let c=r.subscribe(f=>{let M=f.entities[e];i(M)&&(clearTimeout(d),c(),o(M))}),d=setTimeout(()=>{c(),m(new Error(`waitForEntityChange: Timeout of ${t}ms exceeded`))},t)}),getEntity:e=>s().entities[e],getEntities:e=>{let i=Object.values(s().entities);return e?i.filter(e):i},getEntitiesByModel:(e,i)=>s().getEntities(t=>!!t.models[e]?.[i]),resetStore:()=>{a(e=>{e.entities={},e.pendingTransactions={}})}}))));return r}export{I as a};
//# sourceMappingURL=chunk-OFKFHZQF.js.map