UNPKG

subsiphon

Version:
3 lines (2 loc) 2.29 kB
import{Subscription as s,Subject as n,takeUntil as e}from"rxjs";class t{constructor(){return this.subs={},this.index=0,new Proxy(this,{set:(n,e,t)=>e in n?"add"===e?(n.add=t,!0):(console.error(`Attempted to add Subscription value to SubSiphon class methods: ${String(e)} =`,t),!1):t instanceof s?(e in n.subs&&(n.subs[e].unsubscribe(),delete n.subs[e]),n.subs[e]=t,!0):(console.error(`Attempted to add non-Subscription value to SubSiphon: ${String(e)} =`,t),!1),get:(s,n)=>n in s?s[n]:s.subs.hasOwnProperty(n)?s.subs[n]:void 0,has:(s,n)=>n in s.subs,deleteProperty:(s,n)=>(s.subs[n]&&(s.subs[n].unsubscribe(),delete s.subs[n]),!0),ownKeys:s=>Object.keys(s.subs),getOwnPropertyDescriptor(s,n){if(n in s.subs)return{configurable:!0,enumerable:!0,writable:!0,value:s.subs[n]}}})}set add(s){let n=this.index;for(;n in this.subs;)n+=1;this.index=n,this.subs[n]=s}unsubscribe(){for(const s in this.subs)this.subs[s].unsubscribe()}destroy(){for(const s in this.subs)this.subs[s].unsubscribe(),delete this.subs[s]}}function o(){return new t}const r=new WeakMap;function i(s){if(!r.has(s)){const e=new n;r.set(s,e);const t=s.ngOnDestroy;s.ngOnDestroy=function(){e.next(),e.complete(),r.delete(s),"function"==typeof t&&t.apply(this)}}return e(r.get(s))}const u=s=>s&&"function"==typeof s.unsubscribe,c=(s,n,e)=>{if(u(s))try{s.unsubscribe(),e.log&&console.debug(`[Siphon] Unsubscribed: ${n}`)}catch(s){console.error(`[Siphon] Error unsubscribing ${n}`,s)}else if(Array.isArray(s))for(let t=0;t<s.length;t++){const o=s[t];if(u(o))try{o.unsubscribe(),e.log&&console.debug(`[Siphon] Unsubscribed: ${n}[${t}]`)}catch(s){console.error(`[Siphon] Error unsubscribing ${n}[${t}]`,s)}else e.log&&console.warn(`[Siphon] Skipped non-unsubscribable item in ${n}[${t}]`)}else e.log&&console.warn(`[Siphon] ${n} is not unsubscribable`)};function b(s={}){return function(n){const e=n.prototype.ngOnDestroy;n.prototype.ngOnDestroy=function(){const n=this,t=Object.keys(n),o=s.include?s.include:t.filter(n=>{var e;return!(null!=(e=s.exclude)&&e.includes(n))});for(const e of o)t.includes(e)?c(n[e],e,s):console.warn(`[Siphon] Property "${e}" does not exist on instance.`);"function"==typeof e&&e.apply(this)}}}export{b as Siphon,t as SubSiphon,o as createSubSiphon,i as siphon}; //# sourceMappingURL=index.modern.mjs.map