UNPKG

dreamstate

Version:

Store management library based on react context and observers

1 lines 3.5 kB
import{DreamstateError as e}from"../error/DreamstateError.js";import{noop as t}from"../error/noop.js";import{throwAfterDisposal as r}from"../error/throw.js";import{SCOPE_SYMBOL as n,SIGNALING_HANDLER_SYMBOL as o,SIGNAL_METADATA_SYMBOL as i,QUERY_METADATA_SYMBOL as s,SIGNAL_METADATA_REGISTRY as a,QUERY_METADATA_REGISTRY as u}from"../internals.js";import{ContextManager as c}from"../management/ContextManager.js";import{queryDataAsync as f}from"../queries/queryDataAsync.js";import{queryDataSync as E}from"../queries/queryDataSync.js";import{registerQueryProvider as S}from"./queries/registerQueryProvider.js";import{unRegisterQueryProvider as g}from"./queries/unRegisterQueryProvider.js";import{createRegistry as m}from"./registry/createRegistry.js";import{onMetadataSignalListenerCalled as R}from"./signals/onMetadataSignalListenerCalled.js";import{emitSignal as d}from"../signals/emitSignal.js";import{processComputed as T}from"../storing/processComputed.js";import{collectProtoChainMetadata as l}from"../utils/collectProtoChainMetadata.js";import{EDreamstateErrorCode as p}from"../../types/error.js";import{isFunction as C}from"../../utils/typechecking.js";function _(_){void 0===_&&(_=m());var v=_.SIGNAL_LISTENERS_REGISTRY,y=_.CONTEXT_STATES_REGISTRY,I=_.CONTEXT_OBSERVERS_REGISTRY;_.QUERY_PROVIDERS_REGISTRY;var N=_.CONTEXT_SERVICES_REFERENCES,O=_.CONTEXT_INSTANCES_REGISTRY,b=_.CONTEXT_SUBSCRIBERS_REGISTRY,j={INTERNAL:{REGISTRY:_,registerManager:function(e,t,r){if(O.has(e))return!1;var c=new e(t);return r&&Object.assign(c.context,r),T(c.context),c[n]=j,c[i]=l(e,a),c[s]=l(e,u),c[o]=R.bind(c),y.set(e,c.context),N.set(e,0),I.set(e,new Set),v.add(c[o]),O.set(e,c),b.has(e)?b.get(e).forEach((function(e){e(c.context)})):b.set(e,new Set),!0},unRegisterManager:function(e){if(O.has(e)){var i=O.get(e);return i[n]=null,i.setContext=t,i.forceUpdate=t,i.emitSignal=r,i.queryDataSync=r,i.queryDataAsync=r,i.IS_DISPOSED=!0,v.delete(i[o]),O.delete(e),y.delete(e),!0}return O.delete(e),y.delete(e),!1},addServiceObserver:function(e,t,r){void 0===r&&(r=N.get(e)+1),I.get(e).add(t),N.set(e,r),1===r&&O.get(e).onProvisionStarted()},removeServiceObserver:function(e,t,r){void 0===r&&(r=N.get(e)-1),I.get(e).delete(t),N.set(e,r),0===r&&(O.get(e).onProvisionEnded(),this.unRegisterManager(e))},notifyObservers:function(e){var t=e.context;y.set(e.constructor,t),I.get(e.constructor).forEach((function(e){e()})),b.get(e.constructor).forEach((function(e){e(t)}))},subscribeToManager:function(t,r){if(!(t.prototype instanceof c))throw new e(p.TARGET_CONTEXT_MANAGER_EXPECTED,"Cannot subscribe to '".concat(null==t?void 0:t.name,"'."));return b.get(t).add(r),function(){b.get(t).delete(r)}},unsubscribeFromManager:function(t,r){if(!(t.prototype instanceof c))throw new e(p.TARGET_CONTEXT_MANAGER_EXPECTED,"Cannot unsubscribe from '".concat(null==t?void 0:t.name,"'."));_.CONTEXT_SUBSCRIBERS_REGISTRY.get(t).delete(r)}},getContextOf:function(e){var t=y.get(e);return t?Object.assign({},t):null},getInstanceOf:function(e){return O.get(e)||null},emitSignal:function(e,t){return void 0===t&&(t=null),d(e,t,_)},subscribeToSignals:function(t){if(!C(t))throw new e(p.INCORRECT_SIGNAL_LISTENER,typeof t);return v.add(t),function(){v.delete(t)}},unsubscribeFromSignals:function(e){v.delete(e)},registerQueryProvider:function(e,t){return S(e,t,_)},unRegisterQueryProvider:function(e,t){return g(e,t,_)},queryDataSync:function(e){return E(e,_)},queryDataAsync:function(e){return f(e,_)}};return j}export{_ as createScope};