@ogre-tools/injectable-extension-for-mobx
Version:
MobX support for Injectable in Ogre Tools
1 lines • 3.04 kB
JavaScript
import{deregistrationCallbackToken as e,getInjectable as n,getInjectable2 as t,getInjectionToken as i,getInjectionToken2 as o,getKeyedSingletonCompositeKey as a,lifecycleEnum as c,registrationCallbackToken as s}from"@ogre-tools/injectable";import{computed as r,createAtom as d,runInAction as j}from"mobx";const m=i({id:"computed-inject-many"}),g=i({id:"computed-inject-many-with-meta"}),y=o({id:"computed-inject-many-2"}),k=o({id:"computed-inject-many-with-meta-2"}),l=Symbol("isInternalOfComputedInjectMany"),T=n({id:"atoms-by-token-for-reactive-instances",instantiate:()=>new Map,[l]:!0}),p=e=>{const n=e.inject(T);return e=>{let t=e.injectionToken;for(;void 0!==t;){const e=n.get(t);void 0!==e&&e.reportChanged(),t=t.specificTokenOf}}},u=n({id:"invalidate-reactive-instances-on-register",instantiate:p,injectionToken:s,[l]:!0}),I=n({id:"invalidate-reactive-instances-on-deregister",instantiate:p,injectionToken:e,[l]:!0}),v=({id:e,methodInDiToInjectMany:t})=>n({id:e,instantiate:(e,{injectionToken:n,args:i})=>{const o=e.inject(T);let a=o.get(n);return void 0===a&&(a=d(`reactivity-for-${n.id}`),o.set(n,a)),r(()=>(a.reportObserved(),e[t](n,...i)))},lifecycle:c.keyedSingleton({getInstanceKey:(e,{injectionToken:n,args:t})=>a(n,...t)})}),b=v({id:"reactive-instances",methodInDiToInjectMany:"injectMany"}),h=v({id:"reactive-instances-with-meta",methodInDiToInjectMany:"injectManyWithMeta"}),f=({id:e,reactiveInstances:t,injectionToken:i})=>n({id:e,instantiate:e=>(n,...i)=>e.inject(t,{injectionToken:n,args:i}),injectionToken:i}),w=f({id:"computed-inject-many",reactiveInstances:b,injectionToken:m}),M=f({id:"computed-inject-many-with-meta",reactiveInstances:h,injectionToken:g}),C=({id:e,reactiveInstances:n,injectionToken:i})=>t({id:e,instantiate:e=>t=>(...i)=>e.inject(n)({injectionToken:t,args:i}).get(),injectionToken:i}),K=C({id:"computed-inject-many-2",reactiveInstances:b,injectionToken:y}),S=C({id:"computed-inject-many-with-meta-2",reactiveInstances:h,injectionToken:k}),D=i({id:"computed-inject-maybe"}),O=o({id:"computed-inject-maybe-2"}),$=n({id:"computed-inject-maybe-internal",instantiate:(e,{token:n,args:t})=>{const i=e.inject(g)(n,...t);return r(()=>{const e=i.get();if(e.length>1)throw new Error(`Tried to computedInjectMaybe "${n.id}", but more than one contribution was encountered: "${e.map(e=>e.meta.id).join('", "')}"`);return 0===e.length?void 0:e[0].instance})},lifecycle:c.keyedSingleton({getInstanceKey:(e,{token:n,args:t})=>a(n,...t)})}),x=n({id:"computed-inject-maybe",instantiate:e=>(n,...t)=>e.inject($,{token:n,args:t}),injectionToken:D}),A=t({id:"computed-inject-maybe-2",instantiate:e=>n=>(...t)=>e.inject($)({token:n,args:t}).get(),injectionToken:O}),E=e=>{e.hasRegistrations(T)||j(()=>{e.register(T,b,h,w,M,K,S,x,A,$,u,I)})};export{y as computedInjectMany2InjectionToken,m as computedInjectManyInjectionToken,k as computedInjectManyWithMeta2InjectionToken,g as computedInjectManyWithMetaInjectionToken,O as computedInjectMaybe2InjectionToken,D as computedInjectMaybeInjectionToken,E as registerMobX};