/* Copyright © 2024 Melbet - All Rights Reserved */ import{getCurrentScope as D,shallowRef as _,watch as R,unref as p,onScopeDispose as f,nextTick as I,computed as M,effectScope as h,isReadonly as w,isReactive as x,readonly as d,reactive as E}from"../../../../shared-assets/__shared_vue_deps_SRT2KB67.js";import{wrapScopeProperty as L,DependencyName as $,useLogger$1 as b,tryOnUnmounted as A,toDeepReadonly as B,assert as C}from"./entry-Bl6dkD65.js";const S=L($.MEMORY_STORAGE),O=(s,o)=>{D();const n=S(),u=b(),r=_();let c,l=!1;const e=t=>n.getItem(t),y=t=>{const a=h(!0);return a.run(()=>{var m;try{const i={name:t,registrationCounter:0,scope:a,composable:B(o({prevComposable:(m=e(c))==null?void 0:m.composable})),inc:()=>{i.registrationCounter+=1},dec:()=>{i.registrationCounter=Math.max(0,i.registrationCounter-1)}};return i}catch(i){throw u.error(`error create shared composable[${p(s)}]: `,i),i}})},g=t=>{if(!t)return;const a=e(t);a.dec(),a.registrationCounter===0&&(n.removeItem(t),a.scope.stop())},v=t=>{t.registrationCounter===0&&n.setItem(t.name,t),t.inc()};return R(()=>p(s),()=>{var t;const a=p(s);if(a===c||l)return;const m=(t=e(a))!=null?t:y(a);v(m),g(c),c=a,r.value=m},{immediate:!0}),A(()=>{l=!0}),f(()=>{l=!0,I(()=>g(c))}),M(()=>p(r).composable)};let q=1;const P=s=>{const o=`__SHARED_COMPOSABLE_${q++}__`;return(...n)=>{const u=b(),r=S();C(!!r,"createSharedComposable requires MemoryStorage"),C(!!u,"createSharedComposable requires Logger");const c=h(!0);return f(()=>{const e=r.getItem(o);e.dec(),e.registrationCounter<=0&&(e.scope.stop(),r.removeItem(o))}),c.run(()=>{try{let e=r.getItem(o);return e?(e.inc(),e.composable):(e={name:o,registrationCounter:1,scope:c,composable:s(...n),inc:()=>{e.registrationCounter+=1},dec:()=>{e.registrationCounter=Math.max(0,e.registrationCounter-1)}},r.setItem(o,e),e.composable)}catch(e){throw u.error(`error shared composable[${o}]: `,e),e}})}},T=(s,o,n)=>()=>p(O(s,()=>{const r=o();return!n||w(r)?r:x(r)?d(r):d(E(r))})),N=(s,o,n=!1)=>typeof s=="function"?P(s):T(s,o,n);export{N as createSharedComposable};