react-external-subject
Version:
Wrap mutable sources into React-safe mutable source
4 lines (3 loc) • 2.34 kB
JavaScript
;
var q=Object.create,b=Object.defineProperty,R=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty,w=Object.getOwnPropertyNames,V=Object.getOwnPropertyDescriptor,y=e=>b(e,"__esModule",{value:!0}),k=(e,t)=>{y(e);for(var r in t)b(e,r,{get:t[r],enumerable:!0})},O=(e,t,r)=>{if(y(e),t&&typeof t=="object"||typeof t=="function")for(let n of w(t))!P.call(e,n)&&n!=="default"&&b(e,n,{get:()=>t[n],enumerable:!(r=V(t,n))||r.enumerable});return e},S=e=>e&&e.__esModule?e:O(b(e!=null?q(R(e)):{},"default",{value:e,enumerable:!0}),e);k(exports,{ExternalSubjectSynchronizer:()=>h,createExternalSubject:()=>x,useExternalSubject:()=>p});function N(e,t){return!Object.is(e,t)}function x(e){var E;let t=(E=e.shouldUpdate)!=null?E:N,r,n=new Set,u,c=()=>(r||(r={value:e.read()}),r.value),a,T=s=>{a||(a=s)},f=()=>{t(c(),e.read())&&(u&&(u.alive=!1),u={promise:Promise.resolve().then(()=>new Promise(s=>{if(u==null?void 0:u.alive){u=void 0;let l=()=>{r&&(r.value=e.read()),n.forEach(g=>{g()}),s()};a?a(l):l()}})),alive:!0})},i,U=s=>{if(n.add(s),e.lazySubscribe&&e.subscribe&&n.size===1){let l=e.subscribe(f);l&&(i=l)}return()=>{n.delete(s),e.lazySubscribe&&i&&i()}};!e.lazySubscribe&&e.subscribe&&(i=e.subscribe(f));let C=()=>{u&&(u.alive=!1),n.clear(),i&&i()};return{subscribe:U,shouldUpdate:t,requestUpdate:f,getRequest:()=>u,getCachedValue:c,getCurrentValue:e.read,setSynchronizer:T,destroy:C}}var d=S(require("@lyonph/react-hooks")),v=S(require("react")),o=S(require("react")),j=S(require("@lyonph/react-hooks")),z=o.createContext(void 0);function m(){let e=o.useContext(z);if(e)return e;throw new Error("Found no synchronizer.")}function h({children:e}){let[t,r]=o.useState([]),n=j.useConstantCallback(u=>{r(c=>[...c,u])});return o.useEffect(()=>{t.length&&(r([]),t.forEach(u=>{u()}))},[t]),o.default.createElement(z.Provider,{value:n},o.default.createElement(o.Suspense,{fallback:null},e))}function D(e,t=!1){e.setSynchronizer(m());let r=d.useMemoCondition(()=>({read:()=>e.getCachedValue(),subscribe:c=>e.subscribe(c),shouldUpdate:(c,a)=>e.shouldUpdate(c,a)}),e),n=d.useSubscription(r),u=e.getRequest();if(u){if(t)throw u.promise}else{e.requestUpdate();let c=e.getRequest();if(c&&t)throw c.promise}return n}function p(e,t=!1){let r=D(e,t);return v.useDebugValue(r),r}
//# sourceMappingURL=react-external-subject.production.min.js.map