{"version":3,"file":"index.mjs","sources":["../src/useObserver.ts","../../react/dist/index.module.js"],"sourcesContent":["import { useLayoutEffect, useMemo, useState } from \"react\";\nimport { Reaction, Revision, setSubscriber, SubscriberBase } from \"onek\";\n\ntype UnsubscribeFn = () => void;\n\nexport interface IObserver extends SubscriberBase {\n    <T>(callback: () => T): T;\n}\n\nconst isInBrowser = typeof window !== \"undefined\";\n\nconst EMPTY_ARRAY = [] as const;\nconst NOOP = () => {\n    // noop\n};\n\nconst NOOP_OBSERVER: IObserver = (callback) => callback();\nNOOP_OBSERVER.addSubscription = NOOP;\n\nexport function useObserver(): IObserver {\n    if (!isInBrowser) {\n        return NOOP_OBSERVER;\n    }\n\n    const [, triggerUpdate] = useState(new Revision());\n\n    const store = useMemo(() => {\n        const reaction = new Reaction(NOOP, () => {\n            triggerUpdate(new Revision());\n        });\n\n        reaction.shouldSubscribe = false;\n\n        const observer: IObserver = (callback) => {\n            const oldSubscriber = setSubscriber(reaction);\n\n            try {\n                return callback();\n            } finally {\n                setSubscriber(oldSubscriber);\n            }\n        };\n\n        observer.addSubscription = reaction.addSubscription.bind(reaction);\n\n        return {\n            _subscriptionEffect(): UnsubscribeFn {\n                reaction.shouldSubscribe = true;\n\n                reaction.subscribe();\n\n                if (reaction.missedRun()) {\n                    triggerUpdate(new Revision());\n                }\n\n                return () => {\n                    reaction.unsubscribe();\n\n                    reaction.shouldSubscribe = false;\n                };\n            },\n            _onBeforeRender() {\n                reaction.unsubscribeAndCleanup();\n            },\n            _observer: observer,\n        };\n    }, EMPTY_ARRAY);\n\n    useLayoutEffect(store._subscriptionEffect, EMPTY_ARRAY);\n\n    store._onBeforeRender();\n\n    return store._observer;\n}\n","import{useMemo as n,useRef as r,useEffect as t,useSyncExternalStore as u,useTransition as e,useState as o}from\"react\";import{observable as i,computed as f,Reaction as c,Revision as v,setSubscriber as a}from\"onek\";var w=[];function d(r){return n(function(){return i(r)},w)}function m(t,u){void 0===u&&(u=w);var e=r(t);return e.current=t,n(function(){return f(function(){return e.current()})},u)}function p(u,e){void 0===e&&(e=w);var o=r(u);o.current=u;var i=n(function(){return new c(function(){return o.current()})},[]);t(function(){return i.run(),function(){i.destroy()}},e)}var s=\"undefined\"!=typeof window,_=[],b=function(n){return n},y=function(n){return n()};function l(){if(!s)return y;var r=n(function(){var n=new v,r=new Set,t=new c(b,function(){n=new v,r.forEach(function(n){n()})});t.shouldSubscribe=!1;var u=function(n){var r=a(t);try{return n()}finally{a(r)}};return u.addSubscription=t.addSubscription.bind(t),{t:function(n){return r.size||(t.shouldSubscribe=!0,t.subscribe()),r.add(n),function(){r.delete(n),r.size||(t.unsubscribe(),t.shouldSubscribe=!1)}},u:function(){return!r.size&&t.missedRun()&&(t.updateRevisions(),n=new v),n},o:function(){t.unsubscribeAndCleanup()},i:u}},_);return u(r.t,r.u),r.o(),r.i}function R(u){var i,f=e(),v=f[0],a=f[1],w=r(u);w.current=u;var d=n(function(){var n=new c(function(){i=w.current()},function(){n.run(),a(function(){p(i)})});return n.shouldSubscribe=!1,n},[]);t(function(){return d.shouldSubscribe=!0,d.missedRun()?d.runManager():d.subscribe(),function(){d.destroy(),d.shouldSubscribe=!1}},[d]);var m=o(function(){return d.run(),i}),p=m[1];return[v,m[0]]}y.addSubscription=b;export{m as useComputed,d as useObservable,l as useObserver,p as useReaction,R as useTransitionObserver};\n//# sourceMappingURL=index.module.js.map\n"],"names":["isInBrowser","window","EMPTY_ARRAY","NOOP","NOOP_OBSERVER","callback","useObserver","triggerUpdate","useState","Revision","store","useMemo","reaction","Reaction","shouldSubscribe","observer","oldSubscriber","setSubscriber","addSubscription","bind","_subscriptionEffect","subscribe","missedRun","unsubscribe","_onBeforeRender","unsubscribeAndCleanup","_observer","useLayoutEffect","w","d","r","n","i","m","t","u","e","current","f","p","o","c","run","destroy"],"mappings":"6LASA,MAAMA,EAAgC,oBAAXC,OAErBC,EAAc,GACdC,EAAOA,OAIPC,EAA4BC,GAAaA,aAG/BC,IACZ,IAAKN,EACD,OAAOI,EAGX,MAASG,CAAAA,GAAiBC,EAAS,IAAIC,GAEjCC,EAAQC,EAAQ,KAClB,MAAMC,EAAW,IAAIC,EAASV,EAAM,KAChCI,EAAc,IAAIE,EAAU,GAGhCG,EAASE,iBAAkB,EAE3B,MAAMC,EAAuBV,IACzB,MAAMW,EAAgBC,EAAcL,GAEpC,IACI,OAAOP,GACX,CAAC,QACGY,EAAcD,EAClB,GAKJ,OAFAD,EAASG,gBAAkBN,EAASM,gBAAgBC,KAAKP,GAElD,CACHQ,EAAmBA,KACfR,EAASE,iBAAkB,EAE3BF,EAASS,YAELT,EAASU,aACTf,EAAc,IAAIE,GAGf,KACHG,EAASW,cAETX,EAASE,iBAAkB,CAAA,GAGnCU,CAAAA,GACIZ,EAASa,uBACb,EACAC,EAAWX,IAEhBb,GAMH,OAJAyB,EAAgBjB,EAAMU,EAAqBlB,GAE3CQ,EAAMc,IAECd,EAAMgB,CACjB,CAxDAtB,EAAcc,gBAAkBf,ECdhC,IAAMyB,EAAY,GAEZ,SAAUC,EAAiBC,GAC7B,OAAOC,EAAQ,WAAM,OAAAC,EAAWF,EAAM,EAAEF,EAC5C,CAEgB,SAAAK,EAAeC,EAAaC,QAAA,IAAAA,IAAAA,EAAuBP,GAC/D,IAAMQ,EAAQN,EAAOI,GAIrB,OAFAE,EAAMC,QAAUH,EAETH,EAAQ,WACX,OAAOO,EAAS,WAAM,OAAAF,EAAMC,SAAS,EACzC,EAAGF,EACP,CAEgB,SAAAI,EAAYJ,EAAkBC,QAAA,IAAAA,IAAAA,EAAuBR,GACjE,IAAMY,EAAUV,EAAOK,GAEvBK,EAAQH,QAAUF,EAElB,IAAMH,EAAID,EAAQ,WACd,OAAA,IAAWU,EAAS,WAAM,OAAAD,EAAQH,SAAS,EAC/C,EAAG,IAEHH,EAAU,WAGN,OAFAF,EAAEU,MAEK,WACHV,EAAEW,SACN,CACJ,EAAGP,EACP"}