app-com
Version:
Pub Sub Library for Communication in your App
2 lines (1 loc) • 5.57 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.appCom=e()}(this,function(){"use strict";function t(t,e,r){return r.split(t).join(e)}function e(e){for(var r="{",n="}",o=arguments.length,i=Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];for(var E=i.entries(),f=Array.isArray(E),c=0,E=f?E:E[Symbol.iterator]();;){var u;if(f){if(c>=E.length)break;u=E[c++]}else{if(c=E.next(),c.done)break;u=c.value}var s=u,_=s[0],N=s[1];e=t(r+_+n,N,e)}return e}function r(t,e,r){return"[object Object]"!==Object.prototype.toString.call(t)&&"[object Array]"!==Object.prototype.toString.call(t)||(t=JSON.stringify(t)),Object.keys(e).some(function(n){var o=e[n];if("[object Object]"!==Object.prototype.toString.call(o)&&"[object Array]"!==Object.prototype.toString.call(o)||(o=JSON.stringify(o)),r){if(o===t||n===t)return!0}else if(o===t)return!0})}function n(t){for(var e=void 0;!e||"undefined"!=typeof t[e];)e=Math.random().toString(36).substr(2,9);return e}function o(t){return t&&"function"==typeof t}function i(t){return"string"==typeof t}function a(t){return t&&Array.isArray(t)}function E(t){return t&&"object"===("undefined"==typeof t?"undefined":s(t))&&!Array.isArray(t)}function f(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=[];return Object.keys(t).forEach(function(r){E(t[r])?f(t[r]).forEach(function(t){e.push(t)}):e.push(t[r])}),e}function c(t){var e=void 0,r=t.length,n=[],o={};for(e=0;e<r;e++)o[t[e]]=0;for(e in o)o.hasOwnProperty(e)&&n.push(e);return n}var u={SPEARATOR_NOT_SET:"Set separator first with .setSeparator().",SPEARATOR_NO_STRING:"Separator must be a string.",SPEARATOR_LENGHT:"Separator length should be 1 - wtf, are you doing?",EVENTLIST_WRONG_FORMAT:"Event list must be an array or object.",EVENT_NAME_DUPLICATES:"Duplicate event names.",NO_EVENT_NAMES_FOUND:"No event names registered.",EVENT_NAME_NOT_REGISTERED:"Event name must be registered before using it.",EVENT_NAME_NOT_STRING:"Event must be a string.",EVENT_NAME_NO_SEPARATOR:'Event must start with the separator char "{0}".',EVENT_NAME_IS_WILDCARD:'Event name can not be a wildcard. It can not end with "{0}".',SUB_WAS_KILLED_BEFORE:"Tried to call a method on killed subscription.",SUB_WAS_STARTED_BEFORE:"Subscription was stared before.",SUB_WAS_STOPPED_BEFORE:"Subscription was stopped before.",EVENT_DATA_NOT_OBJECT:"Event data must be an object.",EVENT_CALLBACK_NOT_FUNCTION:"Event callback must be a function.",REGISTER_EMPTY:"No events are registered. Register them before using the library!",REGISTER_NOT_DYNAMIC:"Do not change the event registry dynamically! Create a event hub an pass it at init of your app.",SEPARATOR_NOT_DYNAMIC:"Do not change the event separator dynamically! Create a event hub an pass the separator at init of your app."},s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_=function(){function t(t){if(A(),D.length>0)throw new Error(u.REGISTER_NOT_DYNAMIC);var e=[];if(a(t))t.forEach(function(t){e.push(t)});else{if(!E(t))throw new Error(u.EVENTLIST_WRONG_FORMAT);e=f(t)}var r=c(e);if(r.length!==e.length)throw new Error(u.EVENT_NAME_DUPLICATES);if(0===r.length)throw new Error(u.NO_EVENT_NAMES_FOUND);D=r}function s(t){if(g!==!1)throw new Error(u.SEPARATOR_NOT_DYNAMIC);if(!i(t))throw new Error(u.SPEARATOR_NO_STRING);if(1!==t.length)throw new Error(u.SPEARATOR_LENGHT);g=t}function _(t,e){if(T(),l(t),!o(e))throw new Error(u.EVENT_CALLBACK_NOT_FUNCTION);var r=n(I);return I[r]={id:r,eventName:t,callback:e,isActive:!1,isAlive:!0},{kill:function(){w(r),I[r].isAlive=!1},stop:function(){d(r),I[r].isActive=!1},start:function(){m(r),I[r].isActive=!0},startWithLast:function(){m(r),I[r].isActive=!0;var n=R(v(t));n&&e(n.eventData,n)},startWithAll:function(){m(r),I[r].isActive=!0;var n=v(t);n.forEach(function(t){e(t.eventData,t)})}}}function N(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(T(),h(t),!E(e))throw new Error(u.EVENT_DATA_NOT_OBJECT);var r={timestamp:Date.now(),eventName:t,eventData:e};M.push(r),Object.keys(I).forEach(function(t){var e=I[t];e.isActive&&e.isAlive&&(p(e.eventName)?e.callback(r.eventData,r):b(e.eventName)?y(e.eventName,r.eventName)&&e.callback(r.eventData,r):e.eventName===r.eventName&&e.callback(r.eventData,r))})}function A(){if(g===!1)throw new Error(u.SPEARATOR_NOT_SET)}function T(){if(A(),0===D.length)throw new Error(u.REGISTER_EMPTY)}function l(t){if(!i(t))throw new Error(u.EVENT_NAME_NOT_STRING);if(!O(t))throw new Error(e(u.EVENT_NAME_NO_SEPARATOR,g));if(!S(t))throw new Error(u.EVENT_NAME_NOT_REGISTERED)}function h(t){if(l(t),p(t)||b(t))throw new Error(u.EVENT_NAME_IS_WILDCARD)}function v(t){var e=[];return p(t)?e=M:b(t)?M.some(function(r){y(t,r.eventName)&&e.push(r)}):M.some(function(r){t===r.eventName&&e.push(r)}),e}function S(t){return r(t,D)}function O(t){return t.charAt(0)===g}function p(t){return t===g}function b(t){return t.slice(-1)===g}function y(t,e){return e.substring(0,t.length)===t}function R(t){return"undefined"!=typeof t[t.length-1]&&t[t.length-1]}function w(t){if("undefined"==typeof I[t]||!I[t].isAlive)throw new Error(u.SUB_WAS_KILLED_BEFORE)}function m(t){if(w(t),I[t].isActive===!0)throw new Error(u.SUB_WAS_STARTED_BEFORE)}function d(t){if(w(t),I[t].isActive===!1)throw new Error(u.SUB_WAS_STOPPED_BEFORE)}var g=!1,D=[],I={},M=[];return{broadcast:N,subscribe:_,registerEventNames:t,setSeparator:s}};return _});