UNPKG

hbus

Version:
1 lines 3.48 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.HBus={})}(this,function(e){"use strict";var t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},i=function(){function defineProperties(e,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,i){return t&&defineProperties(e.prototype,t),i&&defineProperties(e,i),e}}(),r=function Action(e,i){t(this,Action),this.type=e,this.payload=i};var s=function defaultComparer(e,t){if(e===t&&e+""==t+""||e!=e&&t!=t)return!0;if(!(e instanceof Object&&t instanceof Object))return!1;for(var i in e)if(!(i in t&&defaultComparer(e[i],t[i])))return!1;for(var r in t)if(!(r in e))return!1;return!0},n=function(e){requestAnimationFrame(e)},u={tickMethod:n,_willTick:!1,_callbacks:[],tick:function(e){u._callbacks.push(e),u._willTick||(u._willTick=!0,u.tickMethod(function(){u._willTick=!1;var e=u._callbacks;e.forEach(function(e){e()}),e.length=0}))}},c=function(){function Bus(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t(this,Bus),this.processor=e,this.comparer=s,this._stateRequestCallbacks=[],this._willUpdate=!1,this._actions=[],this._subscriberMap=new Map,this._subscribers=[],this._state=i}return i(Bus,[{key:"_requestUdpate",value:function(){var e=this;this._willUpdate||(this._willUpdate=!0,u.tick(function(){e._willUpdate=!1,e._update();var t=e._stateRequestCallbacks,i=e._state;t.forEach(function(e){e(i)}),t.length=0}))}},{key:"_update",value:function(){var e=this.processor,t=this.comparer,i=this._state,r=this._actions,s=this._subscriberMap,n=i instanceof Object?Object.create(i):i,u=void 0;r.forEach(function(t){void 0!==(u=e(n,t))&&(n=u)}),r.length=0,this._state=n;var c=!1;s.forEach(function(e,r){var s=n[r];t(s,i[r])||(c=!0,e.forEach(function(e){e(s)}))}),!c&&t(i,n)||this._subscribers.forEach(function(e){e(n)})}},{key:"getState",value:function(){return this._state}},{key:"requestState",value:function(e){return this._stateRequestCallbacks.push(e),this._requestUdpate(),this}},{key:"publish",value:function(e){return this._actions.push(e),this._requestUdpate(),this}},{key:"subscribe",value:function(e){return this._subscribers.push(e),this}},{key:"unsubscribe",value:function(e){var t=this._subscribers,i=t.indexOf(e);return i>=0&&t.splice(i,1),this}},{key:"clearSubscribers",value:function(){return this._subscribers.length=0,this}},{key:"subscribeProp",value:function(e,t){var i=this._subscriberMap,r=i.get(e);return r||i.set(e,r=[]),r.push(t),this}},{key:"unsubscribeProp",value:function(e,t){var i=this._subscriberMap.get(e);if(i){var r=i.indexOf(t);r>=0&&i.splice(r,1)}return this}},{key:"clearPropSubscribers",value:function(e){return this._subscriberMap.delete(e),this}},{key:"clearAllPropSubscribers",value:function(){return this._subscriberMap.clear(),this}},{key:"clearAllSubscribers",value:function(){return this.clearSubscribers().clearAllPropSubscribers()}}]),Bus}();e.Action=r,e.createActionFactory=function(e,t){var i=t instanceof Object;return function(s){return new r(e,i&&s instanceof Object?Object.assign({},t,s):s)}},e.createProcessor=function(e,t){return function(i,r){var s=r.type;return s in e?e[s](i,r):t?t(i,r):i}},e.defaultComparer=s,e.defaultTickMethod=n,e.ticker=u,e.Bus=c,Object.defineProperty(e,"__esModule",{value:!0})});