-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalamity-min.js
2 lines (2 loc) · 6.94 KB
/
calamity-min.js
1
2
/*! Calamity 0.5.0-rc.7 - MIT license */
(function(){"undefined"==typeof _&&"function"==typeof require&&(_=require("underscore"));var t={version:"0.5.0-rc.7"},i=this;"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=t),exports.Calamity=t):"function"==typeof define&&define.amd?define(["calamity"],t):i.calamity=t;var r,s,e,n,o,u,h,a,c,p,l,d,f=[].slice,b={}.hasOwnProperty;r=t.Bridge=function(){function t(){var t,i,r,s;for(i=1<=arguments.length?f.call(arguments,0):[],this._seen={},this._busses=i,r=0,s=i.length;s>r;r++)t=i[r],this.subscribeBus(t)}return t.prototype.SEEN_TIME=500,t.prototype._busses=null,t.prototype._seen=null,t.prototype._cleanId=null,t.prototype.subscribeBus=function(t){t.subscribe("*",function(t){return function(i){return function(r){return t.handle(i,r)}}}(this)(t))},t.prototype.handle=function(t,i){var r,s,e,n;if(!this.seen(i))for(n=this._busses,s=0,e=n.length;e>s;s++)r=n[s],r!==t&&r.publish(i)},t.prototype.seen=function(t,i){var r,s;return null==i&&(i=!0),r=(new Date).getTime()-this.SEEN_TIME,s=this._seen[t.id],null!=s&&s>r?!0:(i&&(this._seen[t.id]=(new Date).getTime(),this._scheduleClean()),!1)},t.prototype._scheduleClean=function(){this._cleanId||(this._cleanId=_.delay(function(t){return function(){t._clean(),_.isEmpty(t._seen)||t._scheduleClean()}}(this),this.SEEN_TIME))},t.prototype._clean=function(){var t,i,r,s;r=this._seen,i=(new Date).getTime()-this.SEEN_TIME;for(t in r)b.call(r,t)&&(s=r[t],i>s&&delete r[t])},t}(),s=t.Bus=function(){function t(){this.id=d.genId(),this._subscriptions={},this._bridges=[]}return t.prototype.subscribe=function(t,i,r){var s;return this._subscriptions[t]||(this._subscriptions[t]=[]),s=new h(t,i,r,this),this._subscriptions[t].push(s),this._bridgeProp("subscribe",{subscription:s}),s},t.prototype.unsubscribe=function(t,i){var r,s,e,n,o,u,a,c,p;if(e=t,e instanceof h){if(t=e.address,!this._subscriptions[t])return;for(c=this._subscriptions[t],r=n=0,u=c.length;u>n;r=++n)s=c[r],s===e&&this._subscriptions[t].splice(r)}else{if(!this._subscriptions[t])return;for(p=this._subscriptions[t],r=o=0,a=p.length;a>o;r=++o)s=p[r],s.address===t&&s.handler===i&&(e=s,this._subscriptions[t].splice(r))}this._bridgeProp("unsubscribe",{subscription:e})},t.prototype.publish=function(t,i,r){var s;return s=this._createMessage(t,i,r),t=s.address,s.sawBus(this)?this:(s.addBus(this),this._publishAddress(t,s),this._publishAddress("*",s),this._bridgeProp("publish",{message:s}),this)},t.prototype.send=function(t,i,r){var s;return s=this._createMessage(t,i,r),t=s.address,s.sawBus(this)?this:(s.addBus(this),this._sendAddress(t,s),this._bridgeProp("send",{message:s}),this)},t.prototype.bridge=function(t){if(!(t instanceof EventBridge))throw new Error("Briges must extend Calamity.EventBridge");return _.contains(this._bridges,t)||this._bridges.push(t),this},t.prototype._createMessage=function(t,i,r){var s;return s=t,s instanceof u||(s=new u(t,i,r)),s},t.prototype._publishAddress=function(t,i){var r,s,e,n;if(this._subscriptions[t])for(n=this._subscriptions[t],s=0,e=n.length;e>s;s++)r=n[s],r.trigger(i)},t.prototype._sendAddress=function(t,i){var r,s,e;this._subscriptions[t]&&(e=this._subscriptions[t],s=e.length,r=Math.floor(Math.random()*s),e[r].trigger(i))},t.prototype._bridgeProp=function(t,i){var r,s,e,n,o;if(this._bridges.length>0)for(r="bus."+t,i.bus=this,o=this._bridges,e=0,n=o.length;n>e;e++)s=o[e],s.trigger(r,i)},t}(),n=null,t.global=function(){return n||(n=new s),n},e=t.Emitter=function(){function t(){}return t.prototype.on=function(t,i,r){return r||(r=this),c(this).subscribe(t,i,r)},t.prototype.off=function(t,i,r){return p(this)?(r||(r=this),c(this).unsubscribe(t,i,r)):void 0},t.prototype.trigger=function(t,i,r){return p(this)?c(this).publish(t,i,r):void 0},t}(),p=function(t){var i,r;return null==(null!=t&&null!=(i=t._calamity)&&null!=(r=i.emitter)?r.bus:void 0)?!1:!0},c=function(t){var i,r;return i=t._calamity||(t._calamity={}),r=i.emitter||(i.emitter={}),r.bus||(r.bus=new s)},t.emitter=function(t){return _.extend(t,e.prototype)},u=t.Message=function(){function i(t,i,r){if(this.address=t,this.data=null!=i?i:{},this.id=d.genId(),this._busses=[],!_.isUndefined(r)&&!_.isFunction(r))throw new Error("Reply must be a function");this._replyHandler=r,this.status="ok",this.error=null}return i.prototype.reply=function(t,r){var s;return s=this._replyHandler,_.isFunction(s)?(t instanceof i||(t=new i(null,t,r)),s(t),this):void 0},i.prototype.replyError=function(t,r){var s,e,n,o,u,h;if(null==r&&(r={}),t instanceof Error){for(h="message,name,stack,fileName,lineNumber,description,number".split(","),o=0,u=h.length;u>o;o++)e=h[o],n=t[e],n&&"function"==typeof n.toString&&(n=n.toString()),r[e]=n;"function"==typeof t.toString&&(r.string=t.toString(),t=r.string,r.stack&&(t+=" :: "+r.stack))}return s=new i(null,r),s.status="error",s.error=t,this.reply(s),this},i.prototype["catch"]=function(t,r){var s;if(null==r){if(!_.isFunction(t))throw new Error("Supplied handler is not a function, "+typeof t+" supplied");r=t,t=void 0}if(_.isFunction(this._replyHandler)){if(null!=t){if(!(t instanceof i))return t instanceof Error||(t=new Error(t)),void this.replyError(t);if(t.isError())return void this.reply(t)}try{r(t)}catch(e){s=e,this.replyError(s)}}else{if(null!=t){if(!(t instanceof i))throw t instanceof Error||(t=new Error(t)),t;if(t.isError())throw t.error}r(t)}},i.prototype.isSuccess=function(){return"ok"===this.status},i.prototype.isError=function(){return"error"===this.status},i.prototype.getOptional=function(t,i){var r,s,e,n,o,u;if(s=t.split("."),e=this.data[s[0]],s.length>1)for(u=s.splice(1),n=0,o=u.length;o>n;n++){if(r=u[n],!_.isObject(e)||null==e[r]){e=void 0;break}e=e[r]}return"undefined"==typeof e?i:e},i.prototype.getRequired=function(t){var i;if(i=this.getOptional(t),"undefined"==typeof i)throw new Error('Variable "'+t+'" not found on message with address "'+this.address+'"');return i},i.prototype.addBus=function(t){return this.sawBus(t)?this:(this._busses.push(t.id),this)},i.prototype.sawBus=function(t){return _.contains(this._busses,t.id)},i.prototype.toJSON=function(){var i;return i={calamity:t.version,address:this.address,data:this.data,status:this.status,error:this.error},null!=this._replyHandler&&(i.reply=_.bind(this.reply,this)),i},i.fromJSON=function(t){var r;if(!_.isObject(t))throw new Error("JSON must be an object");if(null==t.calamity)throw new Error("Serialized JSON is not for calamity: "+JSON.stringify(t));return r=new i(t.address,t.data,t.reply),r.status=t.status,r.error=t.error,r},i}(),h=t.Subscription=function(){function t(t,i,r,s){this.address=t,this.handler=i,this.context=r,this.bus=s,this.id=d.genId(),this.active=!0}return t.prototype.unsubscribe=function(){return this.active?(this.bus.unsubscribe(this),this.active=!1,this):void 0},t.prototype.trigger=function(t){var i;return this.active?(i=_.bind(this.handler,this.context),i(t),this):this},t}(),l=Math.random,a=Math.floor,o="0123456789abcdef".split(""),d=t.util={genId:function(){var t,i,r;for(i="",t=r=1;32>=r;t=++r)i+=o[a(l()*o.length)];return i}}}).call(this);