events-observer
Version:
1 lines • 3.75 kB
JavaScript
(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.EventsObserver=b()})(this,function(){"use strict";var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},b=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},c=function(){function a(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),d=Symbol("_order"),e=Symbol("_processPromise"),f=function(){function a(){b(this,a),this[d]=[],this[e]=new Promise(function(a){return a()})}return c(a,[{key:"push",value:function(a,b){this[d].push(a),this[a]=b}},{key:"delete",value:function(a){var b=this;this[e].then(function(){var c=b[d].findIndex(function(b){return b===a});b[d].splice(c,1),delete b[a]})}},{key:"check",value:function(a){return this.hasOwnProperty(a)}},{key:"getItem",value:function(a){return this[a]}},{key:"eachInOrder",value:async function(a){var b=function(){};this[e]=new Promise(function(a){b=a});var c=!0,f=!1,g=void 0;try{for(var h,i=this[d][Symbol.iterator]();!(c=(h=i.next()).done);c=!0)name=h.value,await a(name,this[name])}catch(a){f=!0,g=a}finally{try{!c&&i.return&&i.return()}finally{if(f)throw g}}b()}}]),a}(),g=Symbol("_separator"),h=Symbol("_handlersState"),i=Symbol("_prefix"),j=Symbol("_handlerCounter"),k=Symbol("_createHandlerId"),l=Symbol("_createHandlerObject"),m=Symbol("_parsePath"),n=Symbol("_walkRecursive"),o=Symbol("_callTreeRecursive"),p=function(){function d(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:".",c=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"__handler_id_";b(this,d),this[g]=a,this[h]=new f,this[i]=c,this[j]=0}return c(d,[{key:k,value:function(){return this[i]+this[j]++}},{key:l,value:function(a,b){return{handlerId:this[k](),handler:a,callLimit:b,callCounter:0}}},{key:m,value:function(b){var c;if("string"!=typeof b)throw new Error("Event path type isn't correct ("+("undefined"==typeof b?"undefined":a(b))+"), expected type - string");if(c=b.split(this[g]),-1!==c.findIndex(function(a){return""===a}))throw new Error("Event path can't consists of empty values");return c}},{key:n,value:function(a){var b=a.path,c=a.createIfEmpty,d=a.state,e=a.destinationCallback,g=a.params,h=1>=b.length,i=b.shift(),j=d.check(i);!j&&c&&(d.push(i,new f),j=!0),h?j&&e({state:d,eventName:i,params:g}):(d=d.getItem(i),this[n]({path:b,createIfEmpty:c,state:d,destinationCallback:e,params:g}))}},{key:o,value:function(a){var b=a.state,c=a.eventName,d=a.params;(function a(b){var c=b.state,d=b.eventName,e=b.params;return new Promise(async function(b){c=d&&c[d]?c[d]:c,await c.eachInOrder(async function(b,d){d.handler?(await d.handler(e),++d.callCounter,d.callLimit&&d.callCounter>=d.callLimit&&c.delete(b)):await a({state:d,params:e})}),b()})})({state:b,eventName:c,params:d})}},{key:"on",value:function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,d=this[m](a),e=this[l](b,c);this[n]({path:d,createIfEmpty:!0,state:this[h],destinationCallback:function(a){var b=a.state,c=a.eventName,d=b.getItem(c);d.push(e.handlerId,e)}})}},{key:"off",value:function(a){var b=this[m](a);this[n]({path:b,state:this[h],destinationCallback:function(a){var b=a.state,c=a.eventName;b.delete(c)}})}},{key:"once",value:function(a,b){this.on(a,b,1)}},{key:"trigger",value:function(a,b){var c=this[m](a);this[n]({path:c,state:this[h],params:b,destinationCallback:this[o]})}}]),d}();return p});