remsit
Version:
Alternative fast and light library version - observable.
1 lines • 5.47 kB
JavaScript
(()=>{"use strict";function s(s,e){const i=s.indexOf(e);return-1!==i&&(s[i]=s[s.length-1],s.length=s.length-1,!0)}const e=()=>!1,i=()=>!0,t=()=>"772716b8-e6e2-47ac-95e9-e8d99ce35124",r=(s,e)=>s.order>e.order?1:s.order<e.order?-1:0,n=(s,e)=>s.order>e.order?-1:s.order<e.order?1:0;class o{get order(){return this._order}constructor(s,e){this.isMarkedForUnsubscribe=!1,this.isPipe=!1,this._order=0,this.isListenPaused=!1,this.once={isOnce:!1,isFinished:!1},this.unsubscribeByNegativeCondition=null,this.unsubscribeByPositiveCondition=null,this.emitByNegativeCondition=null,this.emitByPositiveCondition=null,this.emitMatchCondition=null,this.errorHandler=(s,e)=>{console.log(`(Unit of SubscribeObject).send(${s}) ERROR:`,e)},this.observable=s,this.isPipe=!!e}static callbackSend(s,e){const i=e.listener;return i&&e.observable?e.isListenPaused?void 0:e.isPipe?e.emitByPositiveCondition&&e.emitByPositiveCondition(s)||e.emitByNegativeCondition&&!e.emitByNegativeCondition(s)?i(s):e.once.isOnce?(e.once.isFinished=!0,i(s),e.unsubscribe()):e.unsubscribeByNegativeCondition?e.unsubscribeByNegativeCondition(s)?i(s):(e.unsubscribeByNegativeCondition=null,e.unsubscribe()):e.unsubscribeByPositiveCondition?e.unsubscribeByPositiveCondition(s)?(e.unsubscribeByPositiveCondition=null,e.unsubscribe()):i(s):e.emitMatchCondition&&e.emitMatchCondition(s)===s?i(s):void 0:i(s):e.unsubscribe()}subscribe(s,e){return this.listener=s,e&&(this.errorHandler=e),this}unsubscribe(){this.observable&&(this.observable.unSubscribe(this),this.observable=null,this.listener=null)}send(s){try{o.callbackSend(s,this)}catch(e){this.errorHandler(s,e)}}setOnce(){return this.once.isOnce=!0,this}unsubscribeByNegative(s){return this.unsubscribeByNegativeCondition=s??e,this}unsubscribeByPositive(s){return this.unsubscribeByPositiveCondition=s??i,this}emitByNegative(s){return this.emitByNegativeCondition=s??i,this}emitByPositive(s){return this.emitByPositiveCondition=s??e,this}emitMatch(s){return this.emitMatchCondition=s??t,this}resume(){this.isListenPaused=!1}pause(){this.isListenPaused=!0}set order(s){this._order=s}}class u{get isEnable(){return this._isEnable}constructor(s){this.value=s,this.listeners=[],this._isEnable=!0,this.isNextProcess=!1,this.listenersForUnsubscribe=[],this._isDestroyed=!1}disable(){this._isEnable=!1}enable(){this._isEnable=!0}next(s){if(!this._isDestroyed&&this._isEnable){this.isNextProcess=!0,this.value=s;for(let e=0;e<this.listeners.length;e++)this.listeners[e].send(s);this.isNextProcess=!1,this.listenersForUnsubscribe.length&&this.handleListenersForUnsubscribe()}}stream(s){if(!this._isDestroyed&&this._isEnable)for(let e=0;e<s.length;e++)this.next(s[e])}get isDestroyed(){return this._isDestroyed}unSubscribe(e){if(!this._isDestroyed){if(this.isNextProcess&&e){const s=e;return!s.isMarkedForUnsubscribe&&this.listenersForUnsubscribe.push(e),void(s.isMarkedForUnsubscribe=!0)}this.listeners&&s(this.listeners,e)}}destroy(){this.value=null,this.unsubscribeAll(),this.listeners=null,this._isDestroyed=!0}unsubscribeAll(){this._isDestroyed||(this.listeners.length=0)}getValue(){if(!this._isDestroyed)return this.value}size(){return this._isDestroyed?0:this.listeners.length}subscribe(s,e){if(this._isDestroyed)return;if(!s)return;const i=new o(this,!1);return i.subscribe(s,e),this.listeners.push(i),i}pipe(){if(this._isDestroyed)return;const s=new o(this,!0);return this.listeners.push(s),s}handleListenersForUnsubscribe(){const s=this.listenersForUnsubscribe.length;for(let e=0;e<s;e++)this.unSubscribe(this.listenersForUnsubscribe[e]);this.listenersForUnsubscribe.length=0}}class h extends o{constructor(s,e){super(s,e)}get order(){return this._order}set order(s){!this.observable||this.observable&&this.observable.isDestroyed?this._order=void 0:(this._order=s,this.observable.sortByOrder())}subscribe(s,e){return this.listener=s,e&&(this.errorHandler=e),this}setOnce(){return super.setOnce()}unsubscribeByNegative(s){return super.unsubscribeByNegative(s)}unsubscribeByPositive(s){return super.unsubscribeByPositive(s)}emitByNegative(s){return super.emitByNegative(s)}emitByPositive(s){return super.emitByPositive(s)}emitMatch(s){return super.emitMatch(s)}}const b=window;b.Observable=u,b.Collector=class{constructor(){this.list=[],this._isDestroyed=!1}collect(...s){this._isDestroyed||this.list.push(...s)}unsubscribe(e){this._isDestroyed||(e?.unsubscribe(),s(this.list,e))}unsubscribeAll(){if(!this._isDestroyed)for(;this.list.length>0;)this.unsubscribe(this.list.pop())}size(){return this._isDestroyed?0:this.list.length}destroy(){this.unsubscribeAll(),this.list.length=0,this.list=0,this._isDestroyed=!0}get isDestroyed(){return this._isDestroyed}},b.OrderedObservable=class extends u{constructor(){super(...arguments),this.sortDirection=r}setAscendingSort(){return this.sortDirection=r,this.sortByOrder()}setDescendingSort(){return this.sortDirection=n,this.sortByOrder()}sortByOrder(){return!this._isDestroyed&&(this.listeners.sort(this.sortDirection),!0)}subscribe(s,e){if(this._isDestroyed)return;if(!s)return;const i=new h(this,!1);return i.subscribe(s,e),this.listeners.push(i),i}pipe(){if(this._isDestroyed)return;const s=new h(this,!0);return this.listeners.push(s),s}unSubscribe(s){if(!this._isDestroyed){if(this.isNextProcess&&s){const e=s;return!e.isMarkedForUnsubscribe&&this.listenersForUnsubscribe.push(s),void(e.isMarkedForUnsubscribe=!0)}this.listeners&&function(s,e){const i=s.indexOf(e);-1!==i&&s.splice(i,1)}(this.listeners,s)}}}})();