UNPKG

topic-subscribe

Version:

Universal PubSub module for node (including old versions) and browser with subscription filtering and broadcasting.

8 lines (5 loc) 15.5 kB
;(function() { "use strict"; "use strict";function _classCallCheck(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function _toConsumableArray(e){if(Array.isArray(e)){for(var r=0,t=Array(e.length);r<e.length;r++)t[r]=e[r];return t}return Array.from(e)}function makeArray(e){return void 0===e?[]:e instanceof Set?[].concat(_toConsumableArray(e)):Array.isArray(e)?e:[e]}function isString(e){return"string"==typeof e}function isFunction(e){return!!(e&&e.constructor&&e.call&&e.apply)}function isObject(e){return"[object Object]"===Object.prototype.toString.call(e)&&!(null===e)}function isRegExp(e){return e instanceof RegExp}function lop(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/",t=e.split(r);return t.pop(),t.join(r)}function lopper(e){var r,t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";return regeneratorRuntime.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:t=r=e;case 2:if(!r.length){a.next=9;break}return t=r,a.next=6,r;case 6:r=lop(r,n="/"),a.next=2;break;case 9:if("/"===t){a.next=12;break}return a.next=12,"/";case 12:case"end":return a.stop()}},_marked,this)}function getAllPropertyNames(e){var r=new Set;do{Object.getOwnPropertyNames(e).forEach(function(e){return r.add(e)})}while(e=Object.getPrototypeOf(e));return r}function clone(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t={};return Object.getOwnPropertyNames(e).forEach(function(n){isFunction(e[n])?t[n]=e[n].bind(t):r&&!Array.isArray(e[n])&&isObject(e[n])?t[n]=clone(e[n],r):t[n]=e[n]}),t}function hasConstruct(e,r,t){if(t){for(var n=arguments.length,a=Array(n>3?n-3:0),i=3;i<n;i++)a[i-3]=arguments[i];if(e.has&&!e.has(r)){if(e.set)return e.set(r,new(Function.prototype.bind.apply(t,[null].concat(a))));if(e.add)return e.add(new(Function.prototype.bind.apply(t,[null].concat(a))))}else Array.isArray(e)&&!e.includes(r)?e.push(new(Function.prototype.bind.apply(t,[null].concat(a)))):getAllPropertyNames(e).has(r)||(e[r]=new(Function.prototype.bind.apply(t,[null].concat(a))))}}function createError(e,r){if(errors[r]){for(var t=arguments.length,n=Array(t>2?t-2:0),a=2;a<t;a++)n[a-2]=arguments[a];return new e(isFunction(errors[r])?errors[r].apply(errors,n):errors[r])}return new e(r)}function _subscriptionAction(e,r,t,n){e.has(r)||e.set(r,new Set),e.get(r)[t](n)}function _subscriptionsAction(e,r,t,n){r.forEach(function(r){return _subscriptionAction(e,r,t,n)})}function _allChannelsAreCorrectType(e){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e.filter(function(e){return isString(e)?"/"===e.charAt(0):!!r&&isRegExp(e)}).length===e.length}function _allAncestorChannels(e){var r,t,n,a;return regeneratorRuntime.wrap(function(i){for(;;)switch(i.prev=i.next){case 0:r=e.map(function(e){return lopper(e)});case 1:t=0,n=0;case 4:if(!(n<r.length)){i.next=15;break}if((a=r[n].next()).done){i.next=11;break}return i.next=9,a.value;case 9:i.next=12;break;case 11:t++;case 12:n++,i.next=4;break;case 15:if(!(t>=r.length)){i.next=17;break}return i.abrupt("break",19);case 17:i.next=1;break;case 19:case"end":return i.stop()}},_marked2,this)}function _uniqueChannels(e){var r=new Set,t=_allAncestorChannels(e),n=!0,a=!1,i=void 0;try{for(var s,u=t[Symbol.iterator]();!(n=(s=u.next()).done);n=!0){var o=s.value;r.add(o)}}catch(e){a=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(a)throw i}}return Array.from(r)}function _removingTrailingSlash(e){return isString(e)&&"/"===e.charAt(0)?"/"+e.split("/").filter(function(e){return""!==e.trim()}).join("/"):e}function _messageListeners(e,r,t){return e.forEach(function(n){n(new Message(r,Object.assign({},t,{currentTarget:getChannelForListener(e,n)})))}),!!e.size}function addToFilterSet(e,r,t){e.has(r)||(listenerToChannel.has(e)||listenerToChannel.set(e,new WeakMap),listenerToChannel.get(e).set(r,t),e.add(r))}function getChannelForListener(e,r){if(listenerToChannel.has(e))return listenerToChannel.get(e).get(r)}function _filterListeners(e,r,t,n){e.forEach(function(e){sift(e.filter,[t]).length&&(n.has(e.listener)||addToFilterSet(n,e.listener,r))})}function _channelMatcher(e,r,t){var n,a,i,s,u,o,c,l,f,b,h=this;return regeneratorRuntime.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:n=regeneratorRuntime.mark(function e(n,a){var i;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(i=r.filter(function(e){return t(n,e)})).length){e.next=4;break}return e.next=4,[n,a];case 4:case"end":return e.stop()}},e,h)}),a=!0,i=!1,s=void 0,p.prev=4,u=e[Symbol.iterator]();case 6:if(a=(o=u.next()).done){p.next=15;break}return c=o.value,l=_slicedToArray(c,2),f=l[0],b=l[1],p.delegateYield(n(f,b),"t0",12);case 12:a=!0,p.next=6;break;case 15:p.next=21;break;case 17:p.prev=17,p.t1=p.catch(4),i=!0,s=p.t1;case 21:p.prev=21,p.prev=22,!a&&u.return&&u.return();case 24:if(p.prev=24,!i){p.next=27;break}throw s;case 27:return p.finish(24);case 28:return p.finish(21);case 29:case"end":return p.stop()}},_marked3,this,[[4,17,21,29],[22,,24,28]])}function _inChannelsLookup(e,r){var t;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:t=0;case 1:if(!(t<r.length)){n.next=8;break}if(!e.has(r[t])){n.next=5;break}return n.next=5,[r[t],e.get(r[t])];case 5:t++,n.next=1;break;case 8:case"end":return n.stop()}},_marked4,this)}function _getPublishTo(e,r,t){for(var n=new Set,a=_channelMatcher(e,r,function(e,r){if(isRegExp(e))return e.test(r)}),i=_inChannelsLookup(e,r),s=[].concat(_toConsumableArray(a),_toConsumableArray(i)),u=0;u<s.length;u++){var o=s[u],c=_slicedToArray(o,2),l=c[0];_filterListeners(c[1],l,t,n)}return n}function _getBroadcastTo(e,r,t){var n=new Set,a=_channelMatcher(e,r,function(e,r){return!isRegExp(e)&&e.substr(0,r.length)===r}),i=!0,s=!1,u=void 0;try{for(var o,c=a[Symbol.iterator]();!(i=(o=c.next()).done);i=!0){var l=o.value,f=_slicedToArray(l,2),b=f[0];_filterListeners(f[1],b,t,n)}}catch(e){s=!0,u=e}finally{try{!i&&c.return&&c.return()}finally{if(s)throw u}}return n}function _unsubscribeChannel(e,r){var t=!1;return e.has(r)&&(e.get(r).clear(),e.delete(r),t=!0),t}function _unsubscribeListener(e,r){var t=!1;return e.forEach(function(e){e.forEach(function(n){n.listener===r&&(e.delete(n),t=!0)})}),t}function _getCorrectedChannelsArray(e){var r=makeArray(e).map(function(e){return _removingTrailingSlash(e)});if(!_allChannelsAreCorrectType(r,!1))throw createError(TypeError,"ChannelNotAString");return r}function _mirrorMessageParse(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=clone(e||{});return t=isString(r)?r:t,(isString(r)?[]:makeArray(r)).forEach(function(e){n=e(n,t)||n}),n.target=makeArray(n.target||[]),n.target=(n.target.length?n.target:""!==t?[""]:[]).map(function(e){return isString(e)?t+e:e}),n}function getSourceSubscriber(e,r){var t=Private.get(e,"sourceSubscribers",Map),n=Private.get(PubSub,"sourceSubscribers",Map);return t.get(r)||n.get(r)}function _sourceGeneric(e,r,t,n){n.forEach(function(n){return e[r].apply(e,[t].concat(_toConsumableArray(n)))})}function _getOnParams(e,r,t){return makeArray(r).map(function(r){return[function(r){e.mirror(r,t.parsers,t.base)}]})}function _sourceSubscribe(e,r,t,n){_sourceGeneric(r,"subscribe",t,_getOnParams(e,t,n).map(function(e){return n.filter&&e.unshift(n.filter),e}))}function _sourceAddEventListener(e,r,t,n){_sourceGeneric(r,"addEventListener",t,_getOnParams(e,t,n).map(function(e){return n.options?e.push(n.options):n.useCapture&&(e.push(n.useCapture),n.wantsUntrusted&&e.push(n.wantsUntrusted)),e}))}function _source$On(e,r,t,n){_sourceGeneric(r,"$on",t,_getOnParams(e,t,n))}function _sourceUserDefined(e,r,t,n){var a=_getOnParams(e,t,n).map(function(e){return[].concat(_toConsumableArray(makeArray(n.beforeListenerParams)),_toConsumableArray(e),_toConsumableArray(makeArray(n.afterListenerParams)))});_sourceGeneric(r,n.on,t,a)}function _sourceOn(e,r,t,n){_sourceGeneric(r,"on",t,_getOnParams(e,t,n).map(function(e){return n.selector&&e.unshift(n.selector),n.data&&e.unshift(n.data),e}))}function _publish(e,r,t){return _messageListeners(_getPublishTo(e,_uniqueChannels(r),t),t,{target:r,publish:!0})}function _broadcast(e,r,t){return _messageListeners(_getBroadcastTo(e,r,t),t,{target:r,broadcast:!0})}function _mirror(e,r){var t=_getCorrectedChannelsArray(r.target),n=!1;r.data||(r.data={}),r.broadcast||r.publish||(r.publish=!0);var a=void 0,i={target:t};return!0===r.broadcast?(a=_getBroadcastTo(e,t,r.data),i.broadcast=!0):!0===r.publish&&(a=_getPublishTo(e,_uniqueChannels(t),r.data),i.publish=!0),a&&a.size&&(r.timestamp&&(i.timestamp=r.timestamp),n=_messageListeners(a,r.data,i)||n),n}function _subscribe(e,r,t,n){if(!isFunction(n))throw createError(TypeError,"CallbackNotFunction");if(!isObject(t))throw createError(TypeError,"FilterNotAnObject");if(!_allChannelsAreCorrectType(r))throw createError(TypeError,"ChannelNotAString");var a={listener:n,filter:t};return _subscriptionsAction(e,r,"add",a),function(){return _subscriptionsAction(e,r,"delete",a)}}function _unsubscribe(e,r){var t=!1;return r.forEach(function(r){t=isFunction(r)?_unsubscribeListener(e,r)||t:_unsubscribeChannel(e,r)||t}),t}var _slicedToArray=function(){function e(e,r){var t=[],n=!0,a=!1,i=void 0;try{for(var s,u=e[Symbol.iterator]();!(n=(s=u.next()).done)&&(t.push(s.value),!r||t.length!==r);n=!0);}catch(e){a=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(a)throw i}}return t}return function(r,t){if(Array.isArray(r))return r;if(Symbol.iterator in Object(r))return e(r,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),_createClass=function(){function e(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(r,t,n){return t&&e(r.prototype,t),n&&e(r,n),r}}(),_marked=regeneratorRuntime.mark(lopper),_marked2=regeneratorRuntime.mark(_allAncestorChannels),_marked3=regeneratorRuntime.mark(_channelMatcher),_marked4=regeneratorRuntime.mark(_inChannelsLookup),$private=new WeakMap,Private=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"get",value:function(e,r,t){hasConstruct($private,e,Map);for(var n=arguments.length,a=Array(n>3?n-3:0),i=3;i<n;i++)a[i-3]=arguments[i];return hasConstruct.apply(void 0,[$private.get(e),r,t].concat(a)),$private.get(e).get(r)}},{key:"set",value:function(e,r,t){return hasConstruct($private,e,Map),$private.get(e).set(r,t)}}]),e}(),errors={CallbackNotFunction:function(){return"Expected callback to be a function."},ChannelNotAString:function(){return"Expected channel to be a channel string (starting with a slash) or regular-expression."},FilterNotAnObject:function(){return"Expected filter to be an object."}},AT_TARGET=Symbol("Message at target"),BUBBLING_PHASE=Symbol("Message in bubbling phase"),Message=function(){function e(r,t){_classCallCheck(this,e),r=r||{},Private.set(this,"data",r),Private.set(this,"target",t.target),Private.set(this,"currentTarget",t.currentTarget),t.broadcast&&Private.set(this,"broadcast",!!t.broadcast),t.publish&&Private.set(this,"publish",!!t.publish),Private.set(this,"timestamp",(new Date).getTime()),(r.sourceTimestamp||r.timestamp)&&Private.set(this,"sourceTimestamp",r.sourceTimestamp||r.timestamp);var n=!!makeArray(t.target).find(function(e){return isRegExp(e)?e.test(t.currentTarget):e===t.currentTarget});Private.set(this,"eventPhase",n?e.AT_TARGET:e.BUBBLING_PHASE)}return _createClass(e,[{key:"data",get:function(){return Private.get(this,"data")}},{key:"target",get:function(){return Private.get(this,"target")}},{key:"currentTarget",get:function(){return Private.get(this,"currentTarget")}},{key:"broadcast",get:function(){return Private.get(this,"broadcast")}},{key:"publish",get:function(){return Private.get(this,"publish")}},{key:"timestamp",get:function(){return Private.get(this,"timestamp")}},{key:"sourceTimestamp",get:function(){return Private.get(this,"sourceTimestamp")}},{key:"eventPhase",get:function(){return Private.get(this,"eventPhase")}}],[{key:"AT_TARGET",get:function(){return AT_TARGET}},{key:"BUBBLING_PHASE",get:function(){return BUBBLING_PHASE}}]),e}(),listenerToChannel=new WeakMap,PubSub=function(){function e(){_classCallCheck(this,e);var r=this.emitterSourceOrder;r.add({name:"Generic",fromOptions:!0,method:"on"}),r.add({name:"jQuery",fromOptions:!1,method:"on"}),r.add({name:"Angular",fromOptions:!1,method:"$on"}),r.add({name:"PubSub",fromOptions:!1,method:"subscribe"}),r.add({name:"DOM",fromOptions:!1,method:"addEventListener"})}return _createClass(e,[{key:"subscribe",value:function(e,r,t){return _subscribe(Private.get(this,"channels",Map),makeArray(e).map(function(e){return _removingTrailingSlash(e)}),t?r:{},t||r)}},{key:"unsubscribe",value:function(e){return _unsubscribe(Private.get(this,"channels",Map),makeArray(e))}},{key:"publish",value:function(e,r){return _publish(Private.get(this,"channels",Map),_getCorrectedChannelsArray(e),r)}},{key:"broadcast",value:function(e,r){return _broadcast(Private.get(this,"channels",Map),_getCorrectedChannelsArray(e),r)}},{key:"mirror",value:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"/";return _mirror(Private.get(this,"channels",Map),_mirrorMessageParse(e,r,t))}},{key:"source",value:function(e){var r=this,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(isString(t)||Array.isArray(t)||t instanceof Set||isObject(n)&&!Object.keys(n).length&&(n=t,t="/"),n.type){var a=getSourceSubscriber(this,n.type);if(a)return a(this,e,t,n)}[].concat(_toConsumableArray(this.emitterSourceOrder)).every(function(a){var i=a.fromOptions?n[a.method]:a.method;if(e[i]){var s=getSourceSubscriber(r,a.name);if(s)return s(r,e,t,n),!1}return!0})}},{key:"addSourceSubscriber",value:function(e,r){Private.get(this,"sourceSubscribers",Map).set(e,r)}},{key:"deleteSourceSubscriber",value:function(e){Private.get(this,"sourceSubscribers",Map).delete(e)}},{key:"emitterSourceOrder",get:function(){return Private.get(this,"emitterSourceOrder",Set)}}],[{key:"addSourceSubscriber",value:function(r,t){Private.get(e,"sourceSubscribers",Map).set(r,t)}},{key:"deleteSourceSubscriber",value:function(r){Private.get(e,"sourceSubscribers",Map).delete(r)}}]),e}();if(PubSub.addSourceSubscriber("jQuery",_sourceOn),PubSub.addSourceSubscriber("Angular",_source$On),PubSub.addSourceSubscriber("PubSub",_sourceSubscribe),PubSub.addSourceSubscriber("DOM",_sourceAddEventListener),PubSub.addSourceSubscriber("Generic",_sourceUserDefined),window.jQuery||window.$){var $=window.jQuery||window.$,mirrorActions=["publish","broadcast","subscribe","unsubscribe","mirror","source"],pubsubs=new WeakMap;$.fn.pubsub=function(){function e(e){return pubsubs.has(e)||pubsubs.set(e,new(Function.prototype.bind.apply(PubSub,[null].concat(n)))),pubsubs.get(e).unsubscribe(),pubsubs.get(e)}function r(r,t,n){return r.each(function(r,a){var i;return(i=e(a))[t].apply(i,_toConsumableArray(n))}),r}for(var t=arguments.length,n=Array(t),a=0;a<t;a++)n[a]=arguments[a];return function(e,t){return e.forEach(function(e){t[e]=function(){for(var n=arguments.length,a=Array(n),i=0;i<n;i++)a[i]=arguments[i];return r(t,e,a)}}),t}(mirrorActions,this)}}if(window.angular){var pubsub=new PubSub;window.angular.module("TopSubscribe",[]).factory("pubsub",pubsub)} }()); //# sourceMappingURL=topic-subscribe.min.js.map